Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL python连接即使在提交更改后,也不会看到在另一个连接上对数据库所做的更改_Python_Mysql_Cursor_Mysql Python - Fatal编程技术网

MySQL python连接即使在提交更改后,也不会看到在另一个连接上对数据库所做的更改

MySQL python连接即使在提交更改后,也不会看到在另一个连接上对数据库所做的更改,python,mysql,cursor,mysql-python,Python,Mysql,Cursor,Mysql Python,我正在使用MySQLdb模块for Python(v1.2.3预编译二进制for windowspython2.7)向MySQL数据库读写数据。打开连接后,我可以使用该连接来观察在同一连接上对数据库所做的更改,但看不到使用另一个连接所做的更改,无论另一个连接是用Python还是使用MySQL命令行客户端所做的更改。在使用Python进行更新的情况下,请注意,我正在连接上运行commit()命令 将新记录插入具有一个VARCHAR列的测试表的程序示例: import MySQLdb conn =

我正在使用MySQLdb模块for Python(v1.2.3预编译二进制for windowspython2.7)向MySQL数据库读写数据。打开连接后,我可以使用该连接来观察在同一连接上对数据库所做的更改,但看不到使用另一个连接所做的更改,无论另一个连接是用Python还是使用MySQL命令行客户端所做的更改。在使用Python进行更新的情况下,请注意,我正在连接上运行commit()命令

将新记录插入具有一个VARCHAR列的测试表的程序示例:

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")
c = conn.cursor()
c.execute("INSERT INTO test VALUES(%s)", ("Test",))
conn.commit()
c.close()
conn.close()
最后打印恒定记录计数(而不是打印最新记录计数)的程序示例。我只能通过终止并重新运行脚本或者每次运行
SELECT
语句时打开一个新连接来更新计数

import MySQLdb

conn = MySQLdb.connect("localhost", "test", "test", "test")

while True:
    input = raw_input("Enter anything: ")
    if input == "exit":
        break

    c = conn.cursor()
    c.execute("SELECT COUNT(*) FROM test")
    res = c.fetchone()[0]
    c.close()

    print("Number of records: %d" % res)
试试这个

import MySQLdb
import time

from MySQLdb.cursors import SSCursor
conn = MySQLdb.connect("localhost", "test", "test", "test")


while True:
    input = raw_input("Enter anything: ")
    if input == "exit":
        break
    c = conn.cursor()
    conn.begin()
    c.execute("SELECT COUNT(*) FROM test")
    res = c.fetchone()[0]
    #c.commit()
    c.close()

    print("Number of records: %d" % res)
的定义是,它将存储数据,直到数据发生更改。因此,您必须通过
begin
ing或
commit
ing您的连接来指示光标。这将通知游标您必须从数据库中读取新数据

希望这能解决你的疑问


我们还从您的问题中学到了新的东西:)。

这是一个老问题,但如果有人有同样的问题,您需要在您的连接声明中启用自动提交:

import mysql.connector

conn = mysql.connector.connect(
  host='localhost',
  port='3306',
  user='root',
  passwd='rootpassword',
  auth_plugin='mysql_native_password',
  autocommit=True
)

弃用警告:begin()是非标准的,将在1.3中删除
注释
conn.begin()
并取消注释
conn.commit()
。那也行,对我也行。您能否详细说明自动提交如何/为什么连接到SELECT?我认为使用插入/更新时自动提交很重要。我还有一个寻找更改的脚本(在我的例子中,我通过工作台而不是另一个脚本更改数据库)。