正如标题所说,SQLite中Python的'%s %s' % (first_string, second_string)
相当于什么?我知道我可以像first_string || " " || second_string
那样进行连接,但它看起来非常难看。
答案 0 :(得分:2)
我可以理解不喜欢first_string || ' ' || second_string
,但那是等效的。标准SQL(SQLite在这方面说的)并不是世界上最漂亮的字符串操作语言。您可以尝试将查询结果恢复为其他语言(例如,您似乎喜欢的Python)并在那里进行连接;通常最好不要在数据库层中进行“演示”(并且最好不要将连接结果用作搜索的东西;这使得无法使用索引进行优化!)
答案 1 :(得分:2)
注意您可以创建自己的SQL级别函数。例如,您可以使用此Python函数:
def format_data(one, two):
return "%s %s" % (one, two)
使用pysqlite的create_function或APSW的createscalarfunction来告诉SQLite。然后你可以做这样的查询:
SELECT format_data(col1, col2) FROM table WHERE condition;
SELECT * from TABLE where col1 = format_data('prefix', col2);
因此,您可以将格式化逻辑放在易读的Python代码中,同时保持SQL简单但清晰显示意图。
答案 2 :(得分:0)
没有一个。
答案 3 :(得分:0)
我不完全确定您要找的是什么,但可能是group_concat
aggregate function。
答案 4 :(得分:0)
您确定不是在寻找参数替换吗?
直接来自sqlite3 module documentation:
相反,请使用DB-API的参数替换。放?作为占位符,无论您想要使用哪个值,然后提供一个值元组作为游标的execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s或:1。)
例如:
# Never do this -- insecure!
symbol = 'IBM'
c.execute("... where symbol = '%s'" % symbol)
# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)
# Larger example
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]:
c.execute('insert into stocks values (?,?,?,?,?)', t)