Python中写入MySQL数据库的权限?

Python中写入MySQL数据库的权限?,python,mysql,permissions,mysql-python,Python,Mysql,Permissions,Mysql Python,我想我对python和mysql有权限问题。这是我的测试代码test.py #!/usr/bin/python import MySQLdb #change the host, user, passwd, and db below as necessary db = MySQLdb.connect(host="localhost", user="username", passwd="password", db="database") cur = db.cursor() cur.execute

我想我对python和mysql有权限问题。这是我的测试代码test.py

#!/usr/bin/python
import MySQLdb

#change the host, user, passwd, and db below as necessary
db = MySQLdb.connect(host="localhost", user="username", passwd="password", db="database")

cur = db.cursor()
cur.execute("SELECT * from table")
a = cur.fetchall()
print "pre values"
print a

cur.execute("insert into table values(3)")
db.commit

cur.execute("SELECT * from table")
a = cur.fetchall()
print "updated values"
print a

cur.close()
db.close()
当我在shell中执行mysql并尝试插入值时,用户名/密码肯定有效,所以假设我的表中已经有值1和2。这将尝试向其写入3并提交它

这是打印出来的

pre values
(('1',), ('2',))
updated values
(('1',), ('2',), ('3',))
当我再次尝试运行完全相同的脚本时,它会给出完全相同的输出。因此,尽管显示它确实添加到了数据库中,但它没有添加到数据库中。当我在shell中访问mysql并查看表时,它确实没有插入新值

我查过的每个地方都一遍又一遍地告诉我要有db.commit,我现在非常困惑

编辑:我还找到了我计算机上数据库的位置(所有内容都在我的本地计算机上),并将chmod'd 777添加到数据库和包含它的文件夹中

您不调用
db.commit
。您忘记了结尾的括号:

使用

而不是

db.commit

它似乎起作用的原因是:当您在DB连接上操作时(在提交之前),您的更改会应用到DB会话。因此,您的对象会在会话中更新,但更改尚未写入数据库(处于这种状态的对象通常称为脏对象)

当您随后再次查询数据库时,您将看到会话中的更改,即使这些更改尚未写入数据库。一旦
commit()
,会话中的所有更改都会被实际写入数据库

但是,如果使用脏会话连接,将执行隐式回滚:

从现在起,连接将不可用;错误 如果尝试使用任何操作,将引发子类)异常 连接。这同样适用于尝试使用的所有游标对象 连接。请注意,关闭连接而不提交 首先更改将导致执行隐式回滚。


哦,我的上帝,我是有史以来最笨的人,非常感谢你!为什么提交仍然显示了一些东西?或者只是因为插页的缘故才展示了一些东西,不客气。我不会说你很笨,你至少能够清楚地描述你的问题,并提供一个完整的、自成体系的例子,从而很容易发现错误。你不会相信有多少人在这方面失败;-)谢谢你的解释!我真的很感激
db.commit