我有一个数据库,由sqlite3创建:
CREATE TABLE test_table (
username TEXT,
langFrom TEXT,
langTo TEXT,
mode INT,
PRIMARY KEY (
username
));
现在我想通过“SELECT..WHERE”命令从中获取数据。为此,我提出疑问:
def getData(self, **kwargs):
s = """SELECT * FROM test_table WHERE {} = {}"""\
.format(tuple(kwargs.keys()), tuple(kwargs.values()))
我用这种方法:
test_DB.getData(username = 'classtest', langFrom = 'ru')
现在我有一个问题,看起来是这样的:
SELECT * FROM test_table WHERE ('username', 'langFrom') = ('classtest', 'ru')
但我需要这样:
SELECT * FROM test_table WHERE (username, langFrom) = ('classtest', 'ru')
那么我应该如何格式化我的字符串来实现这一点呢?你知道吗
这应该管用
首先,您的查询语法无效,正确的SQL查询应该是:
第二点:不要对SQL查询使用字符串格式-这很棘手,正如您已经发现的,但更多的是it opens your code to SQL injection attacks。你知道吗
正确的方法是使用db api连接器的占位符(“?”对于sqlite3),并将值作为第二个参数传递:
在这种情况下,由于要动态生成查询:
但是你最好使用一个轻量级的ORM,比如peewee,而不是试图重新发明suqre轮子。。。你知道吗
相关问题 更多 >
编程相关推荐