Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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
Python MySQL缓存在Python端_Mysql_Python 3.x_Caching_Google Cloud Sql_Pymysql - Fatal编程技术网

Python MySQL缓存在Python端

Python MySQL缓存在Python端,mysql,python-3.x,caching,google-cloud-sql,pymysql,Mysql,Python 3.x,Caching,Google Cloud Sql,Pymysql,各位,我真的不知道如何解决我的问题,我认为这是关于缓存(内存)错误。 我正在测试使用CloudProxy在本地运行python与GoogleClousQL-MYSQL的连接 我遇到了一个问题,我的表的自动增量ID在python端本地出现了问题,对此我非常陌生 我所做的是 从代码中删除了connection.commit(),以测试它是否可以在不提交()的情况下插入到cloudSQL 运行python文件几次,数据显示在本地终端上,但不显示在云数据库上 将connection.commit()放回

各位,我真的不知道如何解决我的问题,我认为这是关于缓存(内存)错误。 我正在测试使用CloudProxy在本地运行python与GoogleClousQL-MYSQL的连接

我遇到了一个问题,我的表的自动增量ID在python端本地出现了问题,对此我非常陌生

我所做的是

  • 从代码中删除了connection.commit(),以测试它是否可以在不提交()的情况下插入到cloudSQL
  • 运行python文件几次,数据显示在本地终端上,但不显示在云数据库上
  • 将connection.commit()放回代码并运行
  • 不知何故,自动增量ID从python离开的地方开始,而不是从cloudSQL继续
  • 用户ID两边都是11,我删除了connection.commit()并单击了几次run,它显示了带有插入的本地数据库输出,然后我检查cloudSQL没有收到任何插入,所以我将connection.commit()放回代码中。我在玩。提交()

    当我再次单击带有connection.commit()的run时,输出显示userID在local和cloudSQL中从22开始,但应该是12

    我不知道如何解决这个问题,我试图重新启动云代理和python程序,但没有成功。 如果我将commit()放在那里而从不删除它,这不是什么大问题,但我只想知道发生了什么

    我拍摄了终端输出和CloudSQL数据库的截图,下面是我的代码

    import mysql.connector
    
    connection = mysql.connector.connect(host='127.0.0.1',
                                 user='root',
                                 password='root',
                                 db='account')
    con = connection.cursor()
    
    firstname = "Test123"
    lastname = "Test123"
    phone = "1234567890"
    email = "yi@gmail.com"
    address1 = "RMIT Street"
    address2 = "Melbourne"
    postcode = "1234"
    state = "VIC"
    username = "test111"
    password = "abc123"
    
    #userid will auto increment
    statement = "INSERT INTO user (firstname, lastname, phone, email, address1, address2, postcode, state, username, password) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
    value = (firstname,lastname,phone,email,address1,address2,postcode,state,username,password)
    
    con.execute(statement,value)
    connection.commit()
    
    
    con.execute("select * from user")
    for a,b,c,d,e,f,g,h,i,j,k in con.fetchall():
        print (a,b,c,d,e,f,g,h,i,j,k)
    

    这不是Python的问题,这是意料之中的。 看起来您有一些失败的插入,而InnoDB实际上是一个事务引擎

    范例- 会话A插入记录1 会话B插入记录2 C部分插入记录3 会话D失败并回滚 现在插入的下一个id是4,但3不在那里

    参考-


    看起来很相似,但我用python文件在本地运行它,数据库托管在Google Cloud上,有没有办法防止这种情况发生在插入失败的情况下?我想你可以使用
    AUTO_INCREMENT=2
    创建如下表-
    CREATE table foo(id int(11)NOT NULL AUTO_INCREMENT,name int(11)默认为空,主键(id),唯一键uniqname(name))引擎=InnoDB自动增量=2