我想从 python 执行数据库查询:
import MySQLdb
mydb = MySQLdb.connect(host='127.0.0.1', user='root', passwd='', db='macadd', port=3306)
c = mydb.cursor()
c.execute("""INSERT INTO macadd.scanned (mac, first_time_seen, last_time_seen) VALUES (%s, %s, %s)""", ("0A:1B:2C:3D:4E:5F", "2015-09-20 19:00:18", "2015-09-20 19:03:57"))
mydb.close()
print "Done"
这是我向数据库输入值的查询。执行时,它显示已完成,没有任何错误。但是,当我查看数据时,什么都没有出现。我的表是空的。
但是当你使用该_mysql
模块时:
import _mysql
mydb = _mysql.connect(host='127.0.0.1', user='root', passwd='', db='macadd', port=3306)
mydb.query("INSERT INTO macadd.scanned (mac, first_time_seen, last_time_seen) VALUES ('0A:1B:2C:3D:4E:5F', '2015-09-09 00:00:00', '2015-09-02 00:00:00')")
print "done"
它也说完成了,没有错,当我查看数据时,有一条记录已被导入。
实际上我想使用 MySQLdb 模块而不是 _mysql 模块来执行此代码:
("""INSERT INTO macadd.scanned (mac, first_time_seen, last_time_seen) VALUES (%s, %s, %s)""", ("0A:1B:2C:3D:4E:5F", "2015-09-20 19:00:18", "2015-09-20 19:03:57"))
但是,我不知道为什么它不起作用。有谁知道如何让它工作以便我可以使用 MySQLdb 模块吗?
答案1
Mysql DB 支持事务。根据 PEP-249:
“如果数据库支持自动提交功能,则必须首先关闭此功能”和“关闭连接而不先提交更改将导致执行隐式回滚”。
你可以
调用mydb.commit()
以将您的更改提交到数据库
或者
(涅芬特)使用设置自动提交mydb.autocommit(True)