使用Python 3动态插入到sqlite

使用Python 3动态插入到sqlite,python,sqlite,python-3.x,Python,Sqlite,Python 3.x,我想用sqlite写入多个表,但我不想提前手动指定查询(有几十种可能的排列) 例如: def insert_sqlite(tablename, data_list) global dbc dbc.execute("insert into " + tablename + " values (?)", data_list) tables_and_data = { 'numbers_table': [1,2,3,4,5],

我想用sqlite写入多个表,但我不想提前手动指定查询(有几十种可能的排列)

例如:

def insert_sqlite(tablename, data_list)
    global dbc
    dbc.execute("insert into " + tablename + " values (?)", data_list)


tables_and_data = {
                   'numbers_table': [1,2,3,4,5],
                   'text_table': ["pies","cakes"]
                   }

for key in tables_and_data:
    insert_sqlite(key, tables_and_data[key])
我希望发生两件事:

a) 对于动态设置
表名
,我还没有找到一个这样做的示例

b) 要正确使用的
数据列表
值-注意列表的长度不同(根据示例)

但是上述方法不起作用-如何动态创建sqlite3.execute语句

谢谢

a)您上面的代码似乎正确设置了表名,因此没有问题

b) 每个要插入值的列都需要?(占位符)

当我按原样重新创建代码并运行它时,会收到错误消息: “sqlite3.OperationalError:表号\u表有5列,但提供了1个值”

解决方案是编辑函数以动态创建正确数量的占位符:

def insert_sqlite(tablename, data_list):
    global dbc
    dbc.execute("insert into " + tablename + " values (" + ('?,' * len(data_list))[:-1] + ")", data_list)
执行此操作后,然后使用添加的select语句重新执行代码(仅用于测试):

我得到的结果是:

[(1, 2, 3, 4, 5)]
[(u'pies', u'cakes')]
a) 上面的代码似乎正确设置了表名,因此没有问题

b) 每个要插入值的列都需要?(占位符)

当我按原样重新创建代码并运行它时,会收到错误消息: “sqlite3.OperationalError:表号\u表有5列,但提供了1个值”

解决方案是编辑函数以动态创建正确数量的占位符:

def insert_sqlite(tablename, data_list):
    global dbc
    dbc.execute("insert into " + tablename + " values (" + ('?,' * len(data_list))[:-1] + ")", data_list)
执行此操作后,然后使用添加的select语句重新执行代码(仅用于测试):

我得到的结果是:

[(1, 2, 3, 4, 5)]
[(u'pies', u'cakes')]

不错的分析,你也测试了你的建议。回答得好!谢谢我曾尝试过那种放置桌面名称的方法,但不起作用。后来我发现我的表名不好。不管怎么说,我刚把它放进去,它工作得很好。非常感谢。欢迎来到SO!:-)不错的分析,你也测试了你的建议。回答得好!谢谢我曾尝试过那种放置桌面名称的方法,但不起作用。后来我发现我的表名不好。不管怎么说,我刚把它放进去,它工作得很好。非常感谢。欢迎来到SO!:-)