Python Sqlite3将以数字开头的列添加到表中

2024-10-01 09:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用ALTERTABLE命令向现有表中添加一列。由于列名的前导数字,我没有找到解决无法识别的令牌错误的方法

列名示例:Column=1abc

到目前为止,我尝试了以下方法,但没有成功

sql = '''ALTER TABLE {table} ADD COLUMN {column} {data_type};'''.format(table=table, column=column, data_type=data_type)
self.cursor.execute(sql)

sql = '''ALTER TABLE ? ADD COLUMN ? ?;'''
self.cursor.execute(sql, (table, column, data_type))

sql = '''ALTER TABLE %s ADD COLUMN %s %s;''' % (table, column, data_type)
self.cursor.execute(sql)

我知道我需要参数化查询,但我不确定如何让它与ALTERTABLE命令一起工作

我得到的错误输出是:

unrecognized token: "1abc"

Tags: 命令selfaddexecutesqldatatype错误
1条回答
网友
1楼 · 发布于 2024-10-01 09:26:27

列名必须为quoted,并带有双引号*

>>> conn = sqlite3.connect(':memory:')
>>> DDL1 = """CREATE TABLE test ("col1" TEXT);"""
>>> cur.execute(DDL1)
<sqlite3.Cursor object at 0x7f98a67ead50>
>>> conn.commit()
>>> DDL2 = """ALTER TABLE test ADD COLUMN "{}" TEXT"""
>>> cur.execute(DDL2.format('1abc'))
<sqlite3.Cursor object at 0x7f98a67ead50>
>>> conn.commit()
>>> cur.execute("""SELECT * FROM test;""")
<sqlite3.Cursor object at 0x7f98a67ead50>
>>> cur.description
(('col1', None, None, None, None, None, None), ('1abc', None, None, None, None, None, None))

*倒勾(``)和方括号[]也可用于引用,但文档将其描述为非标准方法

相关问题 更多 >