【问题标题】:How To pass the variable name in mysql query using python如何使用python在mysql查询中传递变量名
【发布时间】:2014-11-18 10:52:37
【问题描述】:

如果我在字段中给出静态值,则插入 Myquery。但如果我给出变量名称,则会引发异常。 我的工作代码

import MySQLdb
import datetime

db = MySQLdb.connect("localhost","root","pass","selvapractice" )

cursor = db.cursor()

sql = "INSERT INTO selva(name) \
       VALUES ('Selva') " 
try:
   cursor.execute(sql)
   db.commit()
except: 
   print "dffds"
   db.rollback()

db.close()

我的异常代码

import MySQLdb
import datetime

db = MySQLdb.connect("localhost","root","pass","selvapractice" )

cursor = db.cursor()
a="surya"
sql = "INSERT INTO selva(name) \
       VALUES (%s) " %(a)
try:
   cursor.execute(sql)
   db.commit()
except: 
   print "dffds"
   db.rollback()

db.close()

它打印 dfffds

如何在查询中给出变量名?任何帮助将不胜感激!

【问题讨论】:

  • 一点都不像。
  • 我检查了它在除块之外打印 dfffds
  • @Ignacio,我发现了错误,问题是我放 (%s) 而不是 ('%s')。现在我在查询中添加了单引号,它工作正常。谢谢您帮助确定问题。
  • 这不是解决方法。这就是您创建不安全系统的方式。

标签: php python mysql sql


【解决方案1】:

试试

INSERT INTO table_name (name) VALUES ('selva')

【讨论】:

  • 你给了 name 的静态值。这个查询对我有用。我的问题是如何给出变量名而不是静态值 (selva)
  • INSERT INTO table_name (name) VALUES ('$name')
【解决方案2】:

试试这个: 请注意我是如何将变量作为参数传递给执行函数的,这样可以更好地防止 sql 注入攻击。

import MySQLdb
import datetime

db = MySQLdb.connect("localhost","root","pass","selvapractice" )

cursor = db.cursor()
a="surya"
b="male"
sql = "INSERT INTO selva(name, gender) VALUES (%s, %s)"
try:
   cursor.execute(sql, [a, b])
   db.commit()
except: 
   print "dffds"
   db.rollback()

db.close()

【讨论】:

  • 谢谢,它的作品。你能举个例子在查询中给出一个或多个变量吗?
  • 只需用两个变量更新我的示例,这有帮助吗?
猜你喜欢
  • 2021-03-20
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 2013-05-15
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
相关资源
最近更新 更多