我有一个这样的CSV:
no_orden codigo_producto cantidad_orden precio_cada nombre_producto linea_productos descr precio_compra fecha_orden no_cliente nombre_cliente tlf direccion ciudad estado codigo_postal pais
0 10100 S18_1749 30 136.00 1917 Grand Touring Sedan Vintage Cars Our Vintage Car models realistically portray a... 86.70 2003-01-06 363 Online Diecast Creations Co. 6035558647 2304 Long Airport Avenue Nashua NH 62005 USA
1 10100 S18_2248 50 55.09 1911 Ford Town Car Vintage Cars Our Vintage Car models realistically portray a... 33.30 2003-01-06 363 Online Diecast Creations Co. 6035558647 2304 Long Airport Avenue Nashua NH 62005 USA
它有17列
因此,我将这个csv转换为数据帧import pandas as pd
concesionario = pd.read_csv("Coches/ventas.csv")
df = pd.DataFrame(concesionario)
和我想创建两个SQL表。第一个是:
cursor.execute('''
CREATE TABLE Pedido
(no_orden INT PRIMARY KEY NOT NULL,
codigo_producto CHAR(20),
cantidad_orden INT NOT NULL,
precio_cada FLOAT (10),
nombre_producto TEXT NOT NULL,
linea_productos TEXT NOT NULL,
descr TEXT NOT NULL,
precio_compra FLOAT (10),
fecha_orden DATE,
no_cliente INT NOT NULL)
''')
,它可以工作,所以现在我有了这个表保存它
现在我想把数据框中列的信息传递给新表,我把这个:
for index,row in df.itertuples():
cursor.execute('''
INSERT INTO Pedido (no_orden, codigo_producto, cantidad_orden, precio_cada, nombre_producto, linea_productos, descr, precio_compra, fecha_orden, no_cliente)
VALUES (?,?,?,?,?,?,?,?,?,?)
''',
row.no_orden,
row.codigo_producto,
row.cantidad_orden,
row.precio_cada,
row.nombre_producto,
row.linea_productos,
row.descr,
row.precio_compra,
row.fecha_orden,
row.no_cliente
)
conn.commit()
给我这个错误
ValueError: too many values to unpack (expected 2)
也许这是另一种添加信息的方式,但我不知道我的错误
谢谢大家
pandas dataframes有df.to_sql()
方法,它可能适合您想要做的事情。
from sqlalchemy import create_engine
engine = create_engine(YOUR_DB)
cols = ['no_orden', 'codigo_producto', 'cantidad_orden', 'precio_cada', 'nombre_producto', 'linea_productos', 'descr', 'precio_compra', 'fecha_orden', 'no_cliente']
df_upload = df[cols] # pick the columns you're interested in
with engine.connect() as con:
df_upload.to_sql('Pedido', con)
但是@ george -richter是对的——在这种情况下,python和pandas是相当不必要的开销——根据你使用的SQL,有很多更好的方法从文件中加载值。