我正在学习SQL Alchemy。我有一个CSV文件列名列表。我想为每一行创建插入语句(或所有行的单个插入)。到目前为止我已经
了with open('tablename.csv', 'r') as f:
reader = csv.reader(f)
columns = next(reader)
for data in reader:
query = insert(table(table_name), columns, data)
print(str(query))
这只是打印
INSERT INTO tablename () VALUES ()
表示CSV文件中的每一行。
如何正确提供列名称和值?
答案 0 :(得分:2)
编译的INSERT语句为空的原因是由两件事引起的:您使用的light weight table construct没有定义columns,并且
insert()
的前3个参数是table,values和inline - 而不是表,列和值。在遇到麻烦时,阅读相关文档是一个良好的开端。
SQLAlchemy插入构造可以仅由passing it to execute, accompanied with the desired values使用,也可以作为单个INSERT ... VALUES ...
语句使用。无论哪种方式,如果没有传递完整的表元组,你必须传递列,值对的字典:
tbl = table(table_name, *(column(c) for c in columns))
values = [dict(zip(columns, data)) for data in reader]
# A single INSERT statement with multiple values
stmt = insert(tbl).values(values)
engine.execute(stmt)
# More traditional executemany
engine.execute(insert(tbl), values)