如何在使用Python连接字典值时仅用引号包围字符串



我正在练习Python,并试图创建一个类,帮助执行数据库操作,但当插入到数据库时,这里的代码:

def Insert(self, **kwargs):
    self.__query.execute("INSERT INTO {} ({}) VALUES ({})".format(self.table, ", ".join(kwargs.keys()), ", ".join(str(v) for v in kwargs.values())))
    self.__db.commit()

当我运行以下代码进行测试时:

MyTable.Insert(id=3, name="jack", age=23)

我得到这个错误:

sqlite3。OperationalError: no such column: jack

当我用print替换execute命令时,我得到了这个:

INSERT INTO testTbl111 (id, name, age) VALUES (3, jack, 23)

我猜jack一定是用引号括起来的。

我的问题:是如何在做", ".join(str(v) for v in kwargs.values())时用引号包围jack ?

您不想自己尝试转义值参数,相反,您想构建insert查询并为values放置占位符(?适用于sqlite3) -类似于:

query = 'INSERT INTO {} ({}) VALUES({})'.format(self.table, ', '.join(kwargs), ','.join(['?'] * len(kwargs)))

然后,使用execute的第二个方法(在db对象或游标对象上)传递要替换的值-这些值将自动为数据库正确转义。

self.__db.execute(query, list(kwargs.values()))

最新更新