python 在Sqlite3中动态创建表[重复]

j2cgzkjk  于 2022-11-21  发布在  Python
关注(0)|答案(1)|浏览(223)

此问题在此处已有答案

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,因为如果用户决定输入某些命令而不是一个普通的名称,这可能是一个大问题。
提前感谢!

nnsrf1az

nnsrf1az1#

不,这是不可能的。从SQLite的Angular 来看,表名不能作为动态参数。您需要执行以下操作:

f'CREATE TABLE {table_name} (name TEXT, price REAL, url TEXT)'

但首先需要验证用户输入的table_name。如果您希望将允许的字符限制为(例如)1+英语字母和0+下划线,这应该不是问题。您可能还希望以某种方式验证表名的长度和唯一性。

相关问题