所以我仍然使用Flask-mysql(请不要因为这个原因而拒绝投票......)。
我正好获取数据库上下文(mysql变量),并且可以查询数据库/获取结果。它只是插入不起作用:它没有抱怨(抛出异常)。它从insert方法返回True
。
这应该在提交时插入记录完成,但出于某种原因,当我用MySQL Workbench
观察MySQL数据库时,没有任何内容被插入表中(并且它不会抛出异常)插入方法):
我将此传递给insertCmd
:
"INSERT into user(username, password) VALUES ('test1','somepassword');"
我检查了数据库中列的长度,并将命令复制到MySQL Workbench
(成功将行插入表中)。
我不知所措。我见过的例子似乎都遵循这种格式,我有一个很好的数据库上下文。您可以在评论中看到我尝试过的其他内容。
def insert(mysql, insertCmd):
try:
#connection = mysql.get_db()
cursor = mysql.connect().cursor()
cursor.execute(insertCmd)
mysql.connect().commit()
#mysql.connect().commit
#connection.commit()
return True
except Exception as e:
print("Problem inserting into db: " + str(e))
return False
答案 0 :(得分:5)
您需要保持连接的句柄;你继续在你的循环中覆盖它。
这是一个简化的例子:
con = mysql.connect()
cursor = con.cursor()
def insert(mysql, insertCmd):
try:
cursor.execute(insertCmd)
con.commit()
return True
except Exception as e:
print("Problem inserting into db: " + str(e))
return False
如果mysql
是您的连接,那么您可以直接提交:
def insert(mysql, insertCmd):
try:
cursor = mysql.cursor()
cursor.execute(insertCmd)
mysql.commit()
return True
except Exception as e:
print("Problem inserting into db: " + str(e))
return False
return False
答案 1 :(得分:1)
显然,您必须将连接和光标分开,否则它将无法正常工作。
要获取光标,这将起作用:cursor = mysql.connect()。cursor()
然而,正如Burchan Khalid如此娴熟地指出的那样,为了提交连接对象之后的任何尝试都会消除你使用光标所做的工作。
因此,您必须执行以下操作(无快捷方式):
connection = mysql.connect()
cursor = connection.cursor()
cursor.execute(insertCmd)
connection.commit()