求教一条 Python 中使用的 sql 语句

2022-01-18 20:18:28 +08:00
 youthfire
Python 业余编程爱好者,查了好久都没解决,来请求下帮助

当以下这样写时没问题
condi1 = 'code like' + '"%' + str(code) + '%"'
condi2 = 'code like' + '"%' + str(code2) + '%"'
df = pd.DataFrame(pd.read_sql('select * from f63 where ' + condi1 + ' OR ' + condi2, conn))

但我想写成 code = 就会报错
condi1 = 'code =' + '"%' + str(code) + '%"'
condi2 = 'code =' + '"%' + str(code2) + '%"'
df = pd.DataFrame(pd.read_sql('select * from f63 where ' + condi1 + ' OR ' + condi2, conn))

请问是不是“=”转义的问题? 如果是,应该怎么表达,有查到用\,也有用",甚至和 Python 里的 r'有点概念混一起分不清了
2397 次点击
所在节点    Python
5 条回复
ila
2022-01-18 20:22:45 +08:00
用 f format,
f"{condi1}"。
先 print 出来看组装后的字符串
youthfire
2022-01-18 22:24:58 +08:00
自己发现了两处问题
1.改用 code = 时,后面%就不需要了,因为只有在 like 时有效
2.安全角度和便捷角度,应该使用参数写法

但换了种表达方式,似乎也不见效

df = pd.DataFrame(pd.read_sql("select * from f63 where code = ? OR code = ? AND engine like '%?%'", (str(code), str(code2), str(keystring2))), conn)
youthfire
2022-01-18 23:05:58 +08:00
解决了

df = pd.DataFrame(pd.read_sql("select * from f63 where code = ? OR code = ? AND engine like ?", conn, params=[str(code), str(code2), '%' + str(keystring2) + '%']))
dayeye2006199
2022-01-19 01:43:47 +08:00
虽然这边是用在 pandas 里面,但是拼装 sql 语句不是好习惯。
RRRoger
2022-01-19 10:15:42 +08:00
用 py3 的 f"....." 或者 "...".format()

都比你这个+清晰

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX