2011-04-10 119 views
0

從解釋器我可以從MySQLdb發出>>>很好。所以,我假設模塊確實加載了。我的源如下所示:python2.6與MySQLdb,NameError'MySQLdb'未定義

from Tkinter import *
from MySQLdb import *
"""
Inventory control for Affordable Towing

Functions:
connection() - Controls database connection
delete() - Remove item from database
edit() - Edit item's attributes in database
lookup() - Lookup an item
new() - Add a new item to database
receive() - Increase quantity of item in database
remove() - Decrease quantity of item in database
report() - Display inventory activity
transfer() - Remove item from one location, receive item in another

"""
def control():
....dbInfo = { 'username':'livetaor_atowtw', 'password':'spam', \
....'server':'eggs.com', 'base':'livetaor_towing', 'table':'inventory' }
....def testConnection():
........sql = MySQLdb.connect(user=dbInfo[username], passwd=dbInfo[password], \
........host=dbInfo[server], db=dbInfo[base])
........MySQLdb.mysql_info(sql)

....testConnection()

control()

這給了我:

[email protected]:~/python/towing/inventory$ python inventory.py
Traceback (most recent call last):
..File "inventory.py", line 53, in
....control()
..File "inventory.py", line 26, in control
....testConnection()
..File "inventory.py", line 22, in testConnection
....sql = MySQLdb.connect(user=dbInfo[username], passwd=dbInfo[password], \
NameError: global name 'MySQLdb' is not defined

1)我要去哪裏錯了? 2)你們傢伙看到的其他遺漏嗎?
3)有關如何檢查到數據庫的有效連接(不只是服務器)的任何建議?

回答

2

這是由於您導入模塊然後引用它的方式。

變化:

from MySQLdb import * 

import MySQLdb 

如果你打算引用它,你是時尚。

總之,這裏的這些語句和功能是如何工作的:

來源:http://effbot.org/zone/import-confusion.htm

進口X導入模塊X,並且會在當前命名空間是模塊的引用。或者換句話說,你運行該語句後,您可以使用X.name指從X導入*模塊X.

定義的東西在當前名字空間導入模塊X,並創建引用所有由該模塊定義的公共對象(即沒有以「_」開頭的所有名稱)。或者換句話說,你運行該語句後,你可以簡單地用一個簡單的名稱來指代模塊X.定義的東西,但X本身沒有定義,所以X.name不起作用。如果名稱已經定義,它將被新版本取代。如果X中的名稱更改爲指向某個其他對象,則您的模塊將不會注意到。

從X進口A,B,C導入模塊X,並且會在當前命名空間中給定對象的引用。換句話說,你現在可以在你的程序中使用a和b和c。

+0

我一週,軟弱的靈魂忘了進口,它會影響名字空間的方式。謝謝你提醒我,我有多少白癡。你的解釋遠高於平均水平!我會*嘗試*不要再次忘記這節課。 – brad 2011-04-10 02:33:38

1

from MySQLdb import * and import MySQLdb do 不同的東西。