创建一个Insert对象

时间:2017-09-25 16:57:46

标签: python csv sqlalchemy sql-insert

我正在学习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文件中的每一行。

如何正确提供列名称和值?

1 个答案:

答案 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)