Python2.6与MySQLdb,NameError 'MySQLdb'未定义
从解释器中,我可以正常使用 MySQLdb,所以我想模块应该是加载成功了。我的代码大致如下:
从 Tkinter 导入所有内容
从 MySQLdb 导入所有内容
"""
为 Affordable Towing 进行库存管理功能:
连接(connection()) - 控制数据库连接
删除(delete()) - 从数据库中移除项目
编辑(edit()) - 编辑数据库中项目的属性
查找(lookup()) - 查找某个项目
新增(new()) - 向数据库添加新项目
接收(receive()) - 增加数据库中项目的数量
移除(remove()) - 减少数据库中项目的数量
报告(report()) - 显示库存活动
转移(transfer()) - 从一个地点移除项目,在另一个地点接收项目"""
定义控制(control()):
....dbInfo = { '用户名':'livetaor_atowtw', '密码':'spam',
....'服务器':'eggs.com', '数据库':'livetaor_towing', '表':'inventory' }
....定义测试连接(testConnection()):
........sql = MySQLdb.connect(user=dbInfo[用户名], passwd=dbInfo[密码],
........host=dbInfo[服务器], db=dbInfo[数据库])
........MySQLdb.mysql_info(sql)....测试连接()
控制()
这段代码给我的结果是:
brad@brads-debian:~/python/towing/inventory$ python inventory.py
回溯 (最近的调用在最前面):
..文件 "inventory.py",第 53 行,
....控制()
..文件 "inventory.py",第 26 行,在控制中
....测试连接()
..文件 "inventory.py",第 22 行,在测试连接中
....sql = MySQLdb.connect(user=dbInfo[用户名], passwd=dbInfo[密码],
名称错误:全局名称 'MySQLdb' 未定义
1) 我哪里出错了?
2) 你们看到还有其他问题吗?
3) 有什么建议可以检查数据库的有效连接吗(不仅仅是服务器)?
2 个回答
from MySQLdb import *
和 import MySQLdb
的作用完全不一样。
这跟你导入模块和引用它的方式有关。
把:
from MySQLdb import *
改成
import MySQLdb
如果你打算用你现在的方式来引用它的话。
无论如何,下面是这些语句和函数是怎么工作的:
从: http://effbot.org/zone/import-confusion.htm
当你写 import X
的时候,它会导入模块 X,并在当前的命名空间中创建一个对这个模块的引用。换句话说,执行完这个语句后,你可以用 X.name
来引用模块 X 中定义的内容。
而 from X import *
则是导入模块 X,并在当前的命名空间中创建对该模块所有公共对象的引用(也就是那些名字不以“_”开头的东西)。换句话说,执行完这个语句后,你可以直接用简单的名字来引用模块 X 中的内容。但是 X 本身并没有被定义,所以 X.name
是不能用的。如果名字已经被定义了,它会被新的版本替换掉。而如果模块 X 中的名字指向了其他对象,你的模块是不会察觉到的。
最后,from X import a, b, c
是导入模块 X,并在当前的命名空间中创建对指定对象的引用。换句话说,你现在可以在你的程序中使用 a、b 和 c 了。