1

我正在使用 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:没有这样的列:杰克

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

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

我想jack必须被引号包围。

我的问题是:在做的时候如何jack用引号括起来", ".join(str(v) for v in kwargs.values())

4

1 回答 1

5

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

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

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

self.__db.execute(query, list(kwargs.values()))
于 2013-05-13T22:57:43.600 回答