[英]How To Import CSV Data into MYSQL using Python
当尝试使用 pyodbc 将数据插入 MYSQL 表时,我收到以下消息:
AttributeError: 'str' object 没有属性 'SessionID'
有谁知道我做错了什么?
我的代码:
import pandas as pd
import pyodbc
#generate data frame with pandas
df = pd.read_csv(r'C:\Users\adm_buhe\Documents\order_9b3og4p9wqb876gku.csv')
#db connection settings
conn = pyodbc.connect('Driver={SQL Server};'
'Server=SRV-TASK-HO;'
'Database=stat;'
'Trusted_Connection=yes;')
#connection as variable cursor
cursor = conn.cursor()
for row in df:
cursor.execute('''
INSERT INTO dbo.ABB_Charging_Fakten(sessionID, chargerAlias, SN, startTime, endTime, durationHeures, energyDelivered, totalCharge, sessionStatus, idCar, authorizationType, stopReason )
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''',
row.SessionID,
row.ChargerAlias,
row.SN,
row.StartTime,
row.EndTime,
row.Duration,
row.EnergyDelivered,
row.TotalCharge,
row.SessionStatus,
row.UserName,
row.AuthorizationType,
row.StopReason)
#execute query
conn.commit()
您的问题是您正在迭代 df 的 colnames。 一个简单的例子:
df = pd.DataFrame.from_dict(
{
'Year': [2018, 2019, 2020, 2021],
'Sales': [1000, 2300, 1900, 3400],
}
)
print(df)
Year Sales
0 2018 1000
1 2019 2300
2 2020 1900
3 2021 3400
如果您只是尝试遍历 df:
for row in df:
print(row)
Output(这是字符串,然后 python 返回属性错误):
Year
Sales
您可以使用 pandas 中的iterrows()
方法,该方法每次迭代都会返回一行作为元组。 (但是对于大型数据帧来说,迭代行可能是一种缓慢的方法)
for idx, row in df.iterrows():
print(row)
Output:
Year 2018
Sales 1000
Name: 0, dtype: int64
Year 2019
Sales 2300
Name: 1, dtype: int64
Year 2020
Sales 1900
Name: 2, dtype: int64
Year 2021
Sales 3400
Name: 3, dtype: int64
因此,在这种情况下,您可以使用:
for idx, row in df.iterrows():
cursor.execute('''
INSERT INTO dbo.ABB_Charging_Fakten(sessionID, chargerAlias, SN, startTime, endTime, durationHeures, energyDelivered, totalCharge, sessionStatus, idCar, authorizationType, stopReason )
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
''',
row.SessionID,
row.ChargerAlias,
row.SN,
row.StartTime,
row.EndTime,
row.Duration,
row.EnergyDelivered,
row.TotalCharge,
row.SessionStatus,
row.UserName,
row.AuthorizationType,
row.StopReason)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.