1

我使用 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代码中选择之后,当我打印结果时,它会显示插入的数据。我也没有使用任何交易声明。

4

3 回答 3

5

您需要为数据库提交事务以使您的插入永久化,并且您需要使用 SQL 参数来防止 SQL 注入攻击和一般引用错误:

cursor.execute("insert into login (username, passw) values (%s, %s)", (i.username, i.password))
connection.commit()

在您提交之前,您插入的数据将仅对您的 python 程序可见;如果您根本不提交,那么数据库将再次丢弃更改。

或者,您可以打开自动提交模式:

connection.autocommit()

打开自动提交后,您的插入将立即提交。请注意这一点,因为如果您需要将数据插入到相互依赖的多行和/或表中,这可能会导致数据不一致。

于 2013-04-18T09:13:53.577 回答
2

您还需要在执行语句之后提交数据。在完成插入或更新数据后调用此方法很重要,因为默认情况下 Python 连接器不会自动提交

# 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()
于 2013-04-18T09:13:07.597 回答
0

如果您使用 mysql-python,您可以设置连接选项以启用自动提交功能。

conn = mysql.connection(host, port, autocommit=True)

# or
conn = mysql.connection(host, port)
conn.autocommit(True)

您可以在此处查看更多详细信息

于 2013-04-18T09:33:36.783 回答