1

我仍在使用 Flask-mysql。

我得到数据库上下文(mysql 变量)就好了,并且可以查询数据库/获取结果。只有插入不起作用:它没有抱怨(抛出异常)。它True从插入方法返回。

这应该在它提交时插入记录,但是由于某种原因,当我用 观察 MySQL 数据库时MySQL Workbench,没有任何东西被插入到表中(并且它没有从 insert 方法中抛出异常):

我将其传递给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
4

2 回答 2

6

您需要保留连接句柄;你一直在你的循环中覆盖它。

这是一个简化的示例:

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
于 2017-10-29T06:02:01.897 回答
1

显然,您必须将连接和游标分开,否则它将不起作用。

要获取光标,这将起作用: cursor = mysql.connect().cursor()

然而,正如 Burchan Khalid 非常熟练地指出的那样,此后任何尝试建立连接对象以提交的任何尝试都将清除您使用游标所做的工作。

因此,您必须执行以下操作(没有捷径):

connection = mysql.connect()
cursor = connection.cursor()
cursor.execute(insertCmd)
connection.commit()
于 2017-10-29T06:19:20.923 回答