使用Python加入字典值时如何仅使用引号括起字符串?

Raf*_*del 1 python sqlite python-3.x

我正在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()
Run Code Online (Sandbox Code Playgroud)

当我运行此代码进行测试时:

MyTable.Insert(id=3, name="jack", age=23)
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

sqlite3.OperationalError:没有这样的列:jack

当我用execute命令替换命令时print:

INSERT INTO testTbl111 (id, name, age) VALUES (3, jack, 23)
Run Code Online (Sandbox Code Playgroud)

我猜jack必须被引号包围.

我的问题是:jack在做的时候如何围绕报价", ".join(str(v) for v in kwargs.values())

Jon*_*nts 5

您不想尝试自己转义值参数,而是想要构建insert查询并将占位符(?适用于sqlite3)用于values- 例如:

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

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

self.__db.execute(query, list(kwargs.values()))
Run Code Online (Sandbox Code Playgroud)