sxfxtf 发表于 2022-10-20 17:23

pymysql语句求助

本帖最后由 sxfxtf 于 2022-10-20 17:29 编辑

我要用pymysql插入几条数据,先用execute做测试
比如数据
a=1
b='精瘦肉'
c=22.6
d='猪肉(3种)'
e='元/500克'
f='2021/06/01'
sql = 'insert into cailanzi(mark_id,commodity_name,price,category,unitename,post_date) values(%s,%s,%s,%s,%s,%s)'
然后下面可以成功执行cursor.execute(sql, (a,b,c,d,e,f))
但是我的情况是a这个参数我需要先从另一张表匹配一个市场名称的id
所以a实际上改成 a='(select id from mark_info where mark_name="海曙中心菜市场")'
然后就插入不成功了,
请教下 插入前匹配的话在execute这里的sql语句要怎么拼接字符串啊


这个字符串拼接后插入是没有问题的

GMCN 发表于 2022-10-20 17:31

试试a=r'(<sql>)'

GMCN 发表于 2022-10-20 17:32

等于号后面加个r

海是倒过来的天 发表于 2022-10-20 17:32

在数据库里面直接写语句当然没问题,在编程比如python中用pymysql插入,你要先把A赋值,用execute运行一次再插入就可以了

sxfxtf 发表于 2022-10-20 17:44

海是倒过来的天 发表于 2022-10-20 17:32
在数据库里面直接写语句当然没问题,在编程比如python中用pymysql插入,你要先把A赋值,用execute运行一次 ...

我A不是赋值sql语句了吗?,就是报错

sxfxtf 发表于 2022-10-20 17:45

GMCN 发表于 2022-10-20 17:31
试试a=r'()'

我试了下 不行,还是报错

GMCN 发表于 2022-10-20 18:05

这样是不行的,不能用%s把变量替换进去,这个是数据库参数安全,里面的变量都会转义。你可以直接把那个select语句当成sql的一整个部分,然后那个where条件 改成%s,然后后面变量去添加那个条件值。

sxfxtf 发表于 2022-10-20 20:54

GMCN 发表于 2022-10-20 18:05
这样是不行的,不能用%s把变量替换进去,这个是数据库参数安全,里面的变量都会转义。你可以直接把那个sele ...

老哥 我按你的思路试了试 还是不行.可否写个例子指点下我

a="海曙中心菜市场"
b='精瘦肉'
c=22.6
d='猪肉(3种)'
e='元/500克'
f='2021/06/01'
sql = "insert into cailanzi(mark_name,commodity_name,price,category,unitename,post_date) values((select id from mark_info where mark_name=%s),%s,%s,%s,%s,%s)"

Nettos 发表于 2022-10-20 23:52

那你可以先用另一张表中查询出ID,先赋值给a可以么

sxfxtf 发表于 2022-10-21 00:12

Nettos 发表于 2022-10-20 23:52
那你可以先用另一张表中查询出ID,先赋值给a可以么

这个可以的,我只是想研究下如果用子查询那么pymysql要怎么搞,毕竟这样代码量少很多
页: [1] 2
查看完整版本: pymysql语句求助