Python 并非所有参数都在字符串格式化期间转换-读取csv、元组迭代、写入数据库

Python 并非所有参数都在字符串格式化期间转换-读取csv、元组迭代、写入数据库,python,tuples,pymysql,Python,Tuples,Pymysql,我还是个初学者,我在这个问题上坚持了一段时间。 我试图重新创建它,但有更多的列,甚至更多的行 数据集来自--> Plant_1_Generation_Data.csv 这个计划的想法是什么读取CSV格式的随机数据集并将这些数据插入我的SQL数据库 数据库连接正常。 已成功创建一个表,该表在数据库中可见 代码如下。请注意,我对“createtable”查询进行了注释,因为该表已经创建 import pandas as pd import pymysql '''defining attribute

我还是个初学者,我在这个问题上坚持了一段时间。 我试图重新创建它,但有更多的列,甚至更多的行

数据集来自--> Plant_1_Generation_Data.csv

这个计划的想法是什么读取CSV格式的随机数据集并将这些数据插入我的SQL数据库

数据库连接正常。 已成功创建一个表,该表在数据库中可见

代码如下。请注意,我对“createtable”查询进行了注释,因为该表已经创建

import pandas as pd
import pymysql

'''defining attributes and csv reading'''

data = pd.read_csv(r'E:\Programiranje\csv_practice\Plants data\Plant_1_Generation_Data.csv')
df = pd.DataFrame(data, columns=['DATE_TIME', 'PLANT_ID', 'SOURCE_KEY', 'DC_POWER', 'AC_POWER', 
'DAILY_YIELD','TOTAL_YIELD'])

'''database connection and table creation'''

 cnx = pymysql.connect(host='localhost', user='ivan', password='XXX', db='plants_data')
 cursor = cnx.cursor()
 '''cursor.execute('CREATE TABLE plant_data(DATE_TIME datetime, PLANT_ID int, SOURCE_KEY 
 varchar(255), DC_POWER real,AC_POWER real, DAILY_YIELD real, TOTAL_YIELD real)')'''

 '''touple iteration and writing into the table'''

for row in df.itertuples():
cursor.execute('''INSERT INTO plants_data.dbo.plant_data(DATE_TIME,PLANT_ID,SOURCE_KEY,DC_POWER,AC_POWER,DAILY_YIELD,TOTAL_YIELD)
    VALUES(?, ?, ?, ?, ?, ?, ?)
    ''',
    (row.DATE_TIME,
     row.PLANT_ID,
     row.SOURCE_KEY,
     row.DC_POWER,
     row.AC_POWER,
     row.DAILY_YIELD,
     row.TOTAL_YIELD,)
)
cnx.commit()
错误是

    E:\Programiranje\csv_practice\Scripts\python.exe E:/Programiranje/Python/csv_practice/main.py
    Traceback (most recent call last):
    File "E:/Programiranje/Python/csv_practice/main.py", line 14, in <module>
    cursor.execute(
    File "E:\Programiranje\csv_practice\lib\site-packages\pymysql\cursors.py", line 161, in execute
    query = self.mogrify(query, args)
    File "E:\Programiranje\csv_practice\lib\site-packages\pymysql\cursors.py", line 140, in mogrify
    query = query % self._escape_args(args, conn)
    TypeError: not all arguments converted during string formatting

    Process finished with exit code 1

非常感谢。

DB-API连接器使用的默认占位符由连接器模块的属性值定义。在
pymysql
的情况下

>>> pymysql.paramstyle
'pyformat'
这意味着
pymysql
需要
%s“
作为占位符,而不是
“?”
。如果传递的是值的映射而不是元组,则也可以使用样式
“%(名称)s”

因此,查询应该是

'''INSERT INTO plants_data.dbo.plant_data(DATE_TIME,PLANT_ID,SOURCE_KEY,DC_POWER,AC_POWER,DAILY_YIELD,TOTAL_YIELD)
    VALUES(%s, %s, %s, %s, %s, %s, %s)'''

DB-API连接器使用的默认占位符由连接器模块的属性值定义。在
pymysql
的情况下

>>> pymysql.paramstyle
'pyformat'
这意味着
pymysql
需要
%s“
作为占位符,而不是
“?”
。如果传递的是值的映射而不是元组,则也可以使用样式
“%(名称)s”

因此,查询应该是

'''INSERT INTO plants_data.dbo.plant_data(DATE_TIME,PLANT_ID,SOURCE_KEY,DC_POWER,AC_POWER,DAILY_YIELD,TOTAL_YIELD)
    VALUES(%s, %s, %s, %s, %s, %s, %s)'''

谢谢,这很有帮助,我已经成功地将数据插入数据库。我以前也尝试过同样的方法,但没有成功。无论如何,我还删除了INSERT查询中的
dbo
部分,并更改了表和DATE\u TIME列,因为数据集中的日期和时间格式导致了一些奇怪的错误…谢谢,这很有帮助,我已成功地将数据插入数据库。我以前也尝试过同样的方法,但o.o.不起作用。无论如何,我还删除了INSERT查询中的
dbo
部分,并更改了表和DATE\u TIME列,因为数据集中的日期和时间格式导致它出现了一些奇怪的错误。。。