简体   繁体   English

python MySQL db 和 Cursor 无法执行 INSERT INTO

[英]python MySQL db and Cursor cannot execute INSERT INTO

In Python version 2.7.6在 Python 版本 2.7.6 中

Pandas version 0.18.1熊猫版本 0.18.1

MySQL 5.7 MySQL 5.7

import MySQLdb as dbapi
import sys
import csv
import os
import sys, getopt
import pandas as pd

df = pd.read_csv('test.csv')
rows = df.apply(tuple, 1).unique().tolist()

db=dbapi.connect(host=dbServer,user=dbUser,passwd=dbPass)

cur=db.cursor()

for (CLIENT_ID,PROPERTY_ID,YEAR) in rows:

                INSERT_QUERY=("INSERT INTO {DATABASE}.TEST SELECT * FROM {DATABASE}_{CLIENT_ID}.TEST WHERE PROPERTY_ID = {PROPERTY_ID} AND YEAR = {YEAR};".format(
                CLIENT_ID=CLIENT_ID,
                PROPERTY_ID=PROPERTY_ID,
                YEAR=YEAR,
                DATABASE=DATABASE
             ))

                print INSERT_QUERY
                cur.execute(INSERT_QUERY)
                db.query(INSERT_QUERY)

This will print out the query I am looking for, however, without successfully returning the results of INSERT INTO when I checked the results in MySQL这将打印出我正在寻找的查询,但是,当我在 MySQL 中检查结果时,没有成功返回 INSERT INTO 的结果

INSERT INTO test.TEST SELECT * FROM test_1.TEST WHERE PROPERTY_ID = 1 AND YEAR = 2015;

However, if I just copy and paste this MySQL query into MySQL GUI, it will execute without any problem.但是,如果我只是将此 MySQL 查询复制并粘贴到 MySQL GUI 中,它将毫无问题地执行。 Could any guru enlighten?有上师可以开悟吗?

I also tried the following我也尝试了以下

cur.execute(INSERT_QUERY, multi=True)

Returns an error返回错误

TypeError: execute() got an unexpected keyword argument 'multi'

The answer here is we need to use "from mysql.connector" and a db.commit(). 答案是我们需要使用“ from mysql.connector”和一个db.commit()。 Here is a good example 这是一个很好的例子

http://www.mysqltutorial.org/python-mysql-insert/ http://www.mysqltutorial.org/python-mysql-insert/

import MySQLdb as dbapi
import mysql.connector
import sys
import csv
import os
import sys, getopt
import pandas as pd

df = pd.read_csv('test.csv')
rows = df.apply(tuple, 1).unique().tolist()

db=dbapi.connect(host=dbServer,user=dbUser,passwd=dbPass)

cur=db.cursor()

conn = mysql.connector.connect(host=dbServer,user=dbUser,port=dbPort,password=dbPass)

cursor=conn.cursor()

for (CLIENT_ID,PROPERTY_ID,YEAR) in rows:

                INSERT_QUERY=("INSERT INTO {DATABASE}.TEST SELECT * FROM {DATABASE}_{CLIENT_ID}.TEST WHERE PROPERTY_ID = {PROPERTY_ID} AND YEAR = {YEAR};".format(
                CLIENT_ID=CLIENT_ID,
                PROPERTY_ID=PROPERTY_ID,
                YEAR=YEAR,
                DATABASE=DATABASE
             ))

                print INSERT_QUERY
                cursor.execute(INSERT_QUERY)
                conn.commit()

Only by having the commit, the database/ table changes will be accepted 只有提交,数据库/表的更改才会被接受

I was using mysql-connector pool, trying to insert a new row into a table, and got the same problem.我正在使用 mysql-connector 池,试图在表中插入一个新行,但遇到了同样的问题。 The version info: mysql-8, python3.7.版本信息:mysql-8,python3.7。 The solution is to add connection.commit at last even you didn't start transaction.解决方案是即使您没有启动事务,最后也要添加 connection.commit 。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM