2012-06-19 4 views
-1

Ярмарка предупреждения: я большой день noob. Обращайтесь с перчатками.Подключение к localhost mysql db с python

Детали:

  • Python 3.2
  • MySQL 5.5
  • Торнадо webframe установлен
  • pymysql установлен
  • Windows 7

Проблема: Я после Торнадо документация по подключению t o база данных mysql here. Я только хочу, чтобы подключиться к локальным, но я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Python32\DIP3\tornado-test.py", line 5, in <module> 
    class Connection(localhost,re_project, user=root, password=mypassword, max_idle_time=25200): 
NameError: name 'localhost' is not defined 

Это код, который я пытаюсь запустить:

import tornado.ioloop 
import tornado.web 
import pymysql 

class Connection(localhost,re_project, user=root, password=mypassword, max_idle_time=25200): 
    db = database.Connection("localhost", "re_project") 
    for Bogota in db.query("SELECT * FROM cities_copy"): 
     print(Bogota.title) 

MySQL в настоящее время работает, когда я исполняю код, поэтому я не думаю, что это должно быть проблемой. Что еще я мог делать неправильно?

+0

Вам не нужно ставить его в кавычки? «Локальный»? ... wait ... edit ... traceback выглядел как код, извините, lol. – CasualT

+0

Почему ваше приложение регистрируется в MySQL как root? – robert

+0

@robert, использующий MySQL как root, если он только слушает localhost, не является таким преступлением. Там больше рыбы, чтобы жарить здесь: как синтаксис определения класса –

ответ

0

Хорошо, я думаю, что понимаю проблему. В документации строка class tornado.database.Connection(host, database, user=None, password=None, max_idle_time=25200) является частью документации и не предназначена для копирования/вставки. Это описывает, как сделать бит db = database.Connection.

Зеленые строки кода кода должны работать сами по себе, если 1) импортирован модуль tornado.database и 2) строка db = настроена так, чтобы передавать значения, соответствующие вашей базе данных, методу Connection.

Итак:

from tornado import database # you can use "import tornado.database" here, but then 
           # you will have to use "tornado.database.Connection()" 
           # instead of "database.Connection()" 

db = database.Connection("localhost", "re_project", user="root", password="mypassword") 
for bogota in db.query("SELECT * FROM cities_copy"): # I changed "bogota" to lower-case because the convention in Python is for only classes, not objects, to have upper-case names. 
    print(bogota.title) 

Я не проверял это, потому что у меня нет Python 3.2 установлен, так что дайте мне знать, если он не работает, и я постараюсь приспособиться.

+0

Эй, Андрей, спасибо за помощь! Я обновил свой код на основе ваших комментариев, и я получил глобальную ошибку имени в файле data.py tornado. Я открыл файл, и похоже, что он ищет установленную mysqldb. Я нашел строку, вызывающую ошибку, и попытался ее удалить, а затем получил эту ошибку: ERROR: root: не удается подключиться к MySQL на localhost Я не знаю, насколько это полезно, я мог бы быть немного по сравнению с моим голова здесь. Любая обратная связь была бы оценена, но не ожидала чуда :) – ChrisArmstrong

+0

Хорошо, вам действительно нужно, чтобы mysqldb был установлен для взаимодействия с mysql. Восстановите этот файл до прежнего состояния (вы не можете удалить строку и ожидать ее работы!) И установить пакет mysqldb для python - как вы это делаете, зависит от вашей операционной системы - и повторите попытку. –

+0

Извините, я должен был быть более явным в своем OP. Насколько я знаю, mysqldb не поддерживает Python 3. Поэтому вместо этого у меня установлен pymysql. – ChrisArmstrong

0

Фактически вы не определяете конструктор. Посмотрите на это как шаблон для того, что вам нужно сделать:

class Connection(object): 
    def __init__(self, host, project, user, password, max_idle_time): 
     self.db = database.Connection(
      host, project, user=user, password=password, max_idle_time=max_idle_time) 

    def some_other_method(self): 
     for bogota in self.db.query("SELECT * FROM cities_copy"): 
      print(bogota.title) 
+0

Это то, что я изначально думал, просто глядя на сообщение об ошибке, но теперь, когда я правильно смотрю на код, очистка параметров для подключения к базе данных не входит в это место вообще. –

+0

Спасибо, это полезно. Как я прокомментировал в ответе Даниэля, я думаю, что у меня еще нет оснований, поэтому мне придется пересмотреть правильный синтаксис и попытаться выяснить, где я запутался. – ChrisArmstrong

2

Эта линия:

class Connection(localhost,re_project, user=root, password=mypassword, max_idle_time=25200): 

не имеет никакого смысла вообще. Вы не можете определить такой класс. Вы имели в виду использовать def вместо class?

+0

+1 здесь.Очевидно, было бы неплохо дать «решение» рабочего кода, но неясно, что OP хотел сделать - так лучше всего указать на основную проблему. –

+0

blah, извините - я должен упустить что-то фундаментальное, потому что думал просто копируя пример из документации, заменит мою нехватку знаний в python. Я рассмотрю синтаксис и переработаю свой вопрос по мере необходимости. – ChrisArmstrong

Смежные вопросы