我正试图在Flask和SQLite中构建一个webapp,我有一个包含列的表:Date、Country和Name,我正在对这些数据做一个请求表单
country = request.form.getlist('country')
name = request.form.getlist('name')
str_from_date = request.form.get('from_date')
str_to_date = request.form.get('to_date')
from_date = dt.datetime.strptime(str_from_date, '%d/%m/%Y')
to_date = dt.datetime.strptime(str_to_date, '%d/%m/%Y')
我试图将这些参数传递到sql select语句中 i、 e
SELECT * FROM table WHERE country_col IN {country} AND name_col IN {name}
AND date(date_col) >= {from_date} AND date(date_col) <= {to_date}
但是我找不到一种方法来传递多个参数,所以现在我只有这个,因为cur.execute不接受多个参数
sql = 'SELECT * FROM table WHERE country_col IN ({co}) ORDER BY datetime(date_col) ASC'.format(co=','.join(['?'] * len(country)))
data = cur.execute(sql, country).fetchall()
我需要一种方法,可以将多个参数传递到sql select语句中,以便相应地查询数据
我想到的第一种方法是手动生成查询:
我不知道这是否是理想的方法,但我想它会起作用
可以对SQLite实例而不是Python运行SQL。这样,就更容易发现SQL语句的问题——少了一层
我发现您的查询的语法可能存在问题。当使用
{country}
时,Python将Canada
、Poland
作为字符串。但是SQLite需要的值应该是'Canada'
,'Poland'
除此之外,
IN
运算符检查提供的列表中是否存在字段-这就是为什么需要(
,)
用一个元素构造列表。这里更好的运算符是=
如果我碰了操作员。。。请阅读
BETWEEN
{a1}下一个。我不确定
from_date
/to_date
列中存储了什么。请阅读SQLite docs以确定它是否正确使用因此,对于提议的变更,我希望看到:
更新
传递数组。让我们从基本SQL开始:
从国家(波兰、加拿大、德国)所在的表格中选择*)
要阅读更多信息,请查看this站点。请记住,字符串应该被
'
包围。有时它也可以是"
,但对于PostgreSQL来说"col"
-表示列名col
,而'col'
表示字符串col
。所以你的IN
操作符是对的现在从Python开始,您需要准备带有国家名称的字符串,每个国家名称由
'
包围:join
连接传递列表中的字符串,内部comprehension将'
添加到列表的每个项一起:
相关问题 更多 >
编程相关推荐