Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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.connector将csv插入MySQL数据库_Python_Mysql_Csv - Fatal编程技术网

使用python库MySQL.connector将csv插入MySQL数据库

使用python库MySQL.connector将csv插入MySQL数据库,python,mysql,csv,Python,Mysql,Csv,我无法使用MySQL.connector将csv数据插入MySQL选项卡 我使用的代码如下所示: import mysql.connector import csv andreport = 'testowa.csv' cnx = mysql.connector.connect( user='xxxxx', password='xxxxx', host='xxxxxx', database='xxxxx') cursor = cnx.cursor() with

我无法使用MySQL.connector将csv数据插入MySQL选项卡

我使用的代码如下所示:

import mysql.connector
import csv

andreport = 'testowa.csv'
cnx = mysql.connector.connect(
    user='xxxxx',
    password='xxxxx',
    host='xxxxxx',
    database='xxxxx')

cursor = cnx.cursor()

with open(andreport, 'r') as csv_data:
    for row in csv_data:
        cursor.execute(
            "INSERT INTO flex(date, Store, Vendor, Shelf)"
            "VALUES({},{},{},{})", row)
cnx.commit()
cursor.close()
cnx.close()
print("Done")
我得到的错误是:

C:\Users\Iw4n\PycharmProjects\Learning\venv\Scripts\python.exe C:/Users/Iw4n/PycharmProjects/Learning/Orange_android_MySQL_insertion.py
Traceback (most recent call last):
  File "C:/Users/Iw4n/PycharmProjects/Learning/Orange_android_MySQL_insertion.py", line 15, in <module>
    cursor.execute(
  File "C:\Users\Iw4n\PycharmProjects\Learning\venv\lib\site-packages\mysql\connector\cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Users\Iw4n\PycharmProjects\Learning\venv\lib\site-packages\mysql\connector\connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Users\Iw4n\PycharmProjects\Learning\venv\lib\site-packages\mysql\connector\connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '},{},{},{})' at line 1

我猜问题似乎是您传递了一个参数
(行)
,而不是四个。所以试试这个:

  cursor.execute("""
            INSERT INTO flex(date, Store, Vendor, Shelf)
            VALUES(%s,%s,%s,%s)""",(row[0], row[1], row[2], row[3], ))

查看方法的文档,似乎添加了一些
%s
,因为insert语句中的参数可能会解决这个问题

import mysql.connector
import csv

andreport = 'testowa.csv'
cnx = mysql.connector.connect(
    user='xxxxx',
    password='xxxxx',
    host='xxxxxx',
    database='xxxxx')

cursor = cnx.cursor()

insert_statement = (
    "INSERT INTO flex(date, Store, Vendor, Shelf)"
    "VALUES (%s, %s, %s, %s)"
)

with open(andreport, mode='r') as csv_data:
    reader = csv.reader(csv_data, delimiter=';')
    csv_data_list = list(reader)
    for row in csv_data_list:
        cursor.execute(insert_statement, row)
cnx.commit()
cursor.close()
cnx.close()
print("Done")
让我知道,如果这让你在任何地方,或如果你看到一个新的错误


编辑:更新CSV读取以转换为列表。

现在它引发另一个错误:cnx.commit()语法错误:无效语法。当我注释掉它时,它会为cursor.close()抛出相同的语法错误,然后如果这一个也被注释掉,那么cnx.close()会得到我没有关闭括号的错误:/Try it now cursor.execute(“”TypeError:不是所有的参数在字符串格式转换过程中都转换了。我们几乎做到了。它进行了进一步的处理,但日期格式是YYYY-MM-DD,它被拆分如下:日期获取值2、存储获取值0、供应商获取值1和自获取值9。知道为什么会发生这种情况吗?字段以“;”我尝试了使用%s的解决方案,但它导致了相同的错误。以下是详细信息mysql.connector.errors.ProgrammingError:1064(42000):您的SQL语法有错误;请查看与您的mysql服务器版本对应的手册,在第1Aha行的“%s,%s,%s)”附近使用正确的语法!因此,我认为您需要一些组合,包括添加
%s
s,以及调整从CSV读取数据的方式--更新我的答案!下面是Mahrez BenHamad提出的解决方案,我们就快到了。现在由于未知原因,csv被插入,但不正确。字段以“;”结尾,但第一个字段是形状为“YYYY-MM-DD”的日期,但它被插入为列date get 2、列Store 0、Vendor 1和Shelf 9“是的,因此它似乎将
视为一个字符串,因此如果字符串类似于
'2019…”
,则
行[0]
将是
'2'
行[1]
将是
'0'
,等等。我认为这里的主要问题是如何将数据传递给
execute()
方法
import mysql.connector
import csv

andreport = 'testowa.csv'
cnx = mysql.connector.connect(
    user='xxxxx',
    password='xxxxx',
    host='xxxxxx',
    database='xxxxx')

cursor = cnx.cursor()

insert_statement = (
    "INSERT INTO flex(date, Store, Vendor, Shelf)"
    "VALUES (%s, %s, %s, %s)"
)

with open(andreport, mode='r') as csv_data:
    reader = csv.reader(csv_data, delimiter=';')
    csv_data_list = list(reader)
    for row in csv_data_list:
        cursor.execute(insert_statement, row)
cnx.commit()
cursor.close()
cnx.close()
print("Done")