关于MySQLdb conn.autocommit(True)

chi*_*dan 5 python mysql-python

我安装了python 2.7 64bit,MySQL-python-1.2.3.win-amd64-py2.7.exe.

我使用以下代码插入数据:

class postcon:
    def POST(self):
        conn=MySQLdb.connect(host="localhost",user="root",passwd="mysql",db="dang",charset="utf8")  
        cursor = conn.cursor()
        n = cursor.execute("insert into d_message (mid,title,content,image) values(2,'xx','ccc','fff')")
        cursor.close()
        conn.close()
        if n:
            raise web.seeother('/')
Run Code Online (Sandbox Code Playgroud)

这导致打印n为1,但在mysql中客户端数据不可见.

谷歌说我必须添加conn.autocommit(True).

但我不知道为什么MySQLdb将其关闭;

Col*_*lau 6

我不知道是否有特定的理由使用GAE自动提交(假设您正在使用它).否则,您只需手动提交即可.

class postcon:
    def POST(self):
        conn=MySQLdb.connect(host="localhost",user="root",passwd="mysql",db="dang",charset="utf8")  
        cursor = conn.cursor()
        n = cursor.execute("insert into d_message (mid,title,content,image) values(2,'xx','ccc','fff')")
        conn.commit() # This right here
        cursor.close()
        conn.close()
        if n:
            raise web.seeother('/')
Run Code Online (Sandbox Code Playgroud)

请注意,您可能应该检查插入是否成功,如果没有,则回滚提交.


Mik*_*ikA 5

默认情况下,MySQLdb自动提交为false,

您可以像这样在MySQLdb连接中将autocommit设置为True,

conn=MySQLdb.connect(host="localhost",user="root",passwd="mysql",db="dang",charset="utf8")
conn.get_autocommit()        #will return **False**
conn.autocommit(True)
conn.get_autocommit()        #Should return **True** now
cursor = conn.cursor()
Run Code Online (Sandbox Code Playgroud)

  • 情况似乎并非如此,`autocommit` 是一种方法(使用 *mysqlclient 1.3.12* 和 *MySQL-python 1.2.3* 测试)。所以 `conn.autocommit(True)` 是这里的正确答案。`conn.autocommit = True` 只会覆盖方法属性而不启用它 (2认同)