python sqlite3中列名能不能用变量?

mChenQ 2018-07-20 10:54:54
execute("update stu set 列名 = 值 where id = 值") 这里的 列名 和列名值能不能都用变量?求大佬解释
...全文
357 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
混沌鳄鱼 2018-07-23
  • 打赏
  • 举报
回复
引用 5 楼 Master724 的回复:
def update_data(item,val,stuid):
#更改item列的值为val
sql = "update stu set ?=? where id=?" #这个语句会有错
curs.execute(sql,(item,val,stuid))


要多加一层单引号,在format时会消耗一层
up("sex","'female'",2)
fardeas 2018-07-22
  • 打赏
  • 举报
回复
你需要peewee
mChenQ 2018-07-21
  • 打赏
  • 举报
回复
def up(item,val,stuid):
sql = "update stu set {}={} where id={}"
curs.execute(sql.format(item,val,stuid))

我这样调用的时候 up("age",33,2) 把2号年龄修改成33,这样不会出错
但是这样up("sex","female",2)修改性别就会报这样的错
sqlite3.OperationalError: no such column: female
为什么这里的值会传到列上去呢?
mChenQ 2018-07-20
  • 打赏
  • 举报
回复
都试过了,把列名当作变量的话,会出错,试了很多种还是不行,不过这种列名做变量对于数据是不安全的
oyljerry 2018-07-20
  • 打赏
  • 举报
回复
先用str字符串format来拼接变量,组成后,再送给execute执行
ghostgoodbye 2018-07-20
  • 打赏
  • 举报
回复
这是sql语句,和python没啥关系了。execute 里面就是个字串而已,看你自己怎么拼
ghostgoodbye 2018-07-20
  • 打赏
  • 举报
回复
你写的这个有点java那种替换的味道。这个方法在python里面不行,请参考python的string.fromat的使用
mChenQ 2018-07-20
  • 打赏
  • 举报
回复
def update_data(item,val,stuid):
#更改item列的值为val
sql = "update stu set ?=? where id=?" #这个语句会有错
curs.execute(sql,(item,val,stuid))
ghostgoodbye 2018-07-20
  • 打赏
  • 举报
回复
发下你代码是如何实现的

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧