python2.6 с MySQLdb, NameError 'MySQLdb' не определено - PullRequest
0 голосов
/ 10 апреля 2011

из интерпретатора, который я могу выдать >>> из MySQLdb просто отлично.Итак, я предполагаю, что модуль действительно загрузился.Мой источник выглядит следующим образом:

из импорта Tkinter *
из импорта MySQLdb *
"" "
Управление запасами для доступной буксировки

Функции:
connection () - Управляет подключением к базе данных
delete () - Удалить элемент из базы данных
edit () - Редактировать атрибуты элемента в базе данных
lookup () - Найти элемент
new () - Добавить объектновый элемент в базу данных
receive () - увеличение количества элемента в базе данных
remove () - уменьшение количества элемента в базе данных
report () - отображение активности инвентаризации
Transfer () - удаление элемента изв одном месте, получить элемент в другом

"" "
def control ():
.... dbInfo = {'username': 'livetaor_atowtw', 'password': 'spam',\
.... 'server': 'eggs.com', 'base': 'livetaor_towing', 'table': 'inventory'}
.... def testConnection ():
........ sql = MySQLdb.connect (user = dbInfo [имя пользователя], passwd = dbInfo [пароль], \
........ host = dbInfo [сервер], db = dbInfo [база])
........ MySQLdb.mysql_info (sql)

.... testConnection ()

control ()

это дает мне:

brad @ brads-debian: ~ / python / towing / inventory $ python inventory.py
Трассировка (последний последний вызов):
..Файл "inventory.py", строка 53, в
....control ()
..Файл "inventory.py", строка 26, в элементе управления
.... testConnection ()
..Файл "inventory.py", строка 22, в testConnection
.... sql = MySQLdb.connect (user = dbInfo [имя пользователя], passwd = dbInfo [пароль], \
NameError: глобальное имя 'MySQLdb' не определено

1) где я ошибаюсь?
2) какие-либо другие ошибки, которые вы, ребята, видите?
3) какие-либо советы о том, как проверить правильность соединения с базой данных (не только с сервером)?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2011

Это связано с тем, как вы импортируете модуль и затем ссылаетесь на него.

Изменение:

from MySQLdb import *

до

import MySQLdb

если вы планируете ссылаться на это так, как вы.

В любом случае, вот как работают эти операторы и функции:

От: http://effbot.org/zone/import-confusion.htm

import X импортирует модуль X и создает ссылку на этот модуль в текущем пространстве имен. Иными словами, после выполнения этого оператора вы можете использовать X.name для ссылки на вещи, определенные в модуле X.

из X import * импортирует модуль X и создает ссылки в текущем пространстве имен на все открытые объекты, определенные этим модулем (то есть все, что не имеет имени, начинающегося с «_»). Иными словами, после выполнения этого оператора вы можете просто использовать простое имя для ссылки на вещи, определенные в модуле X. Но сам X не определен, поэтому X.name не работает. И если имя уже было определено, оно заменяется новой версией. И если имя в X будет изменено, чтобы указать на какой-либо другой объект, ваш модуль не заметит.

из X import a, b, c импортирует модуль X и создает ссылки в текущем пространстве имен на заданные объекты. Или, другими словами, теперь вы можете использовать a и b и c в вашей программе.

1 голос
/ 10 апреля 2011

from MySQLdb import * и import MySQLdb делают очень разные вещи.

...