使用python循环将列添加到SQLite3数据库表时出错

时间:2018-12-26 17:17:04

标签: python python-3.x sqlite

我正在尝试使用python中的项目列表在SQLite数据库中创建表,但是在创建表时却给了我操作上的错误。

我正在使用python for循环将此列表项用作列标题。直到列表项“ QT”循环运行良好,然后循环中断并给我错误。

col_names = [
    "ABPs",
    "ABPd",
    "ABPm",
    "ARTs",
    "ARTd",
    "ARTm",
    "AoS",
    "AoD",
    "AoM",
    "UAPs",
    "UAPd",
    "UAPm",
    "P1s",
    "P1d",
    "P1m",
    "NBPs",
    "NBPd",
    "NBPm",
    "P_1d",
    "P_1m",
    "PVC",
    "QT",
    "QT-HR",
    "QTc",
    "ST-I",
    "ST-II",
    "ST-III",
    "ST-aVR",
    "ST-aVF",
    "ST-aVL",
    "ST-MCL",
    "ST-V1",
    "ST-V2",
    "dQTc",
    "ST-V3",
    "ST-V4",
    "ST-V5",
    "ST-V6",
]

cur.execute("""CREATE TABLE CICU2 (datetime DATETIME)""")
for colname in col_names:
    cur.execute("""ALTER TABLE CICU2 ADD COLUMN """ + colname + """ TEXT""")

错误:near "-": syntax error

1 个答案:

答案 0 :(得分:2)

在未转义的列名称中不允许

-;您正在要求SQLite从另一列中减去一个列名称。如果要在列名称中使用任何非标准字符,则必须使用proper quoting

引用列名的标准方法是使用双引号。列名称中任何现有的双引号都可以替换为 doubled 双引号:

cur.execute('ALTER TABLE CICU2 ADD COLUMN "{}" TEXT'.format(colname.replace('"', '""'))

我使用format string将列名插入查询中,这对于人类来说更容易阅读。 {}部分由str.format()方法的第一个参数的值替换。