如何在sqlite3中创建具有从列表中获取的列名的表?

时间:2019-01-13 06:33:13

标签: python-2.7 sqlite multiple-columns

我打算在sqlite3中创建一个表,其表中的列名称为[item1,...]。我不想在创建表时对列名进行硬编码,因为列数甚至名称都是动态的。我希望使用正确的语法直接从此列表中获取列名称。谢谢。我正在使用python。

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

import contextlib
import sqlite3

fields = ["field1", "field2", "field3"]

with contextlib.closing(sqlite3.connect(':memory:')) as conn:
    cursor = conn.cursor()
    columns = ", ".join("{field} TEXT".format(field=field) for field in fields)
    cursor.execute("""
    CREATE TABLE IF NOT EXISTS your_table(
         id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
         {columns}
    )
    """.format(columns=columns))
    conn.commit()

但是,您应该考虑使用ORM,例如SqlAlchemy。这是有关此的教程:https://www.pythoncentral.io/introductory-tutorial-python-sqlalchemy/

修改

要走得更远,您的插入语句可以这样构建:

stmt = ("INSERT INTO mytable ({fields}) VALUES ({marks})"
.format(fields=", ".join(fields), marks=", ".join("?" * len(fields))))

例如:

INSERT INTO mytable (field1, field2, field3) VALUES (?, ?, ?)