此问题在此处已有答案:
SQLite: Why can't parameters be used to set an identifier?(3个答案)
4小时前关门。
我正在使用tkinter和sqlite3创建一个wishlist应用程序。我希望用户能够通过输入名称在主数据库文件中创建表。为此,我连接了一个按钮到这个函数
def create_table(table_name):
connection = sql.connect(f'{directory}\main.sqlite')
cursor = connection.cursor()
cursor.execute("CREATE TABLE ? (name TEXT, price REAL, url TEXT)",(table_name,))
connection.close()
不幸的是,这不起作用,我得到了下面的消息cursor.execute("create table ? (name text, price real, url text)",(table_name,)) sqlite3.OperationalError: near "?": syntax error
。是否可以在CREATE TABLE
中进行字符串格式化?我宁愿创建单独的表,而不是一个表和一个附加列来表示项的ID。
我不想使用f-string
,因为如果用户决定输入某些命令而不是一个普通的名称,这可能是一个大问题。
提前感谢!
1条答案
按热度按时间nnsrf1az1#
不,这是不可能的。从SQLite的Angular 来看,表名不能作为动态参数。您需要执行以下操作:
但首先需要验证用户输入的
table_name
。如果您希望将允许的字符限制为(例如)1+英语字母和0+下划线,这应该不是问题。您可能还希望以某种方式验证表名的长度和唯一性。