我使用python 2.7和MySQL作为数据库。在我的python程序中有INSERT
这样的查询:
cursor.execute("insert into login(username,passw)values('"+i.username+"','"+i.password+"')")
result=cursor.execute("select * from login")
print cursor.fetchall()
当我签入数据库时,没有条目。但是在我的python代码中选择之后,当我打印结果时,它显示了插入的数据。我也没有使用任何交易声明。
答案 0 :(得分:4)
您需要为数据库提交您的事务以使您的插入永久化,并且您需要使用SQL参数来防止SQL注入攻击和一般引用错误:
cursor.execute("insert into login (username, passw) values (%s, %s)", (i.username, i.password))
connection.commit()
在您提交之前,您插入的数据只对您的python程序可见;如果您根本没有提交,那么数据库将再次丢弃。
或者,您可以打开自动提交模式:
connection.autocommit()
启用自动提交后,您的插入将立即提交。请注意这一点,因为如果您需要将数据插入到多行和/或相互依赖的表中,这可能会导致数据不一致。
答案 1 :(得分:2)
执行语句后还需要commit数据。完成插入或更新数据后调用此方法非常重要,因为Python连接器不是auto commit by default。
# Execute & Commit
cursor.execute("insert into login(username,passw) values('%s','%s')",
i.username, i.password)
# Commit the insert query!
conn.commit()
# Fetch Result
result=cursor.execute("select * from login")
print cursor.fetchall()
答案 2 :(得分:0)
如果使用mysql-python,则可以设置连接选项以启用自动提交功能。
conn = mysql.connection(host, port, autocommit=True)
# or
conn = mysql.connection(host, port)
conn.autocommit(True)
您可以查看更多详情here