我可以发出>>>从MySQLdb就好了。所以,我假设模块确实加载了。我的来源如下:
来自Tkinter import *
来自MySQLdb import *
“”“
负担得起的拖车库存控制功能:
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 [username],passwd = dbInfo [password],\
........ host = dbInfo [server],db = dbInfo [base])
........ MySQLdb.mysql_info(sql).... testConnection()
control()
这给了我:
brad @ brads-debian:〜/ python / towing / inventory $ python inventory.py
追溯(最近的呼叫最后):
..文件“inventory.py”,第53行,在 ....控制()
..文件“inventory.py”,第26行,在控制中 .... testConnection()
..文件“inventory.py”,第22行,在testConnection中 .... sql = MySQLdb.connect(user = dbInfo [username],passwd = dbInfo [password],\
NameError:全局名称'MySQLdb'未定义
1)我哪里出错?
2)你们看到的其他任何问题?
3)关于如何检查与数据库的有效连接的任何建议(不仅仅是服务器)?
答案 0 :(得分:2)
这是由于您导入模块然后引用它的方式。
变化:
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 :(得分:1)
from MySQLdb import *
和import MySQLdb
执行非常不同的事情。