gng*_*zrd 22 python sql format sql-like
我很难在python中获取一些sql以正确浏览MySQLdb.它是pythons字符串格式化,正在杀死我.
我的sql语句使用带有通配符的LIKE关键字.我在Python中尝试了很多不同的东西.问题是,一旦我让其中一个工作,MySQLdb中的一行代码就是字符串格式.
尝试1:
"SELECT tag.userId,count(user.id)as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE'%% s%'"%(query)
这是不行的.我得到价值错误:
ValueError:索引128处不支持的格式字符'''(0x27)
尝试2:
"SELECT tag.userId,count(user.id)as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username LIKE'\ %% s \%'"%(query)
我从尝试1得到了相同的结果.
尝试3:
like ="LIKE'%"+ str(查询)+"%'"totalq ="SELECT tag.userId,count(user.id)as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user.username "+喜欢
这正确地创建了totalq变量,但是现在当我去运行查询时,我从MySQLdb获得错误:
文件"build/bdist.macosx-10.6-universal/egg/MySQLdb/cursors.py",第158行,执行查询=查询%db.literal(args)TypeError:格式字符串的参数不够
尝试4:
like ="LIKE'\%"+ str(查询)+"\%'"totalq ="SELECT tag.userId,count(user.id)as totalRows FROM user INNER JOIN tag ON user.id = tag.userId WHERE user .username"+喜欢
这与尝试3的输出相同.
这一切似乎都很奇怪.如何在python的sql语句中使用通配符?
ber*_*nie 26
这些查询似乎都容易受到SQL注入攻击.
尝试这样的事情:
curs.execute("""SELECT tag.userId, count(user.id) as totalRows
FROM user
INNER JOIN tag ON user.id = tag.userId
WHERE user.username LIKE %s""", ('%' + query + '%',))
Run Code Online (Sandbox Code Playgroud)
哪里有两个参数传递给execute()
.
dzi*_*ida 11
它不是字符串格式,但问题是如何根据Python中的db操作要求执行查询(PEP 249)
尝试这样的事情:
sql = "SELECT column FROM table WHERE col1=%s AND col2=%s"
params = (col1_value, col2_value)
cursor.execute(sql, params)
Run Code Online (Sandbox Code Playgroud)
这里有一些psycog2的例子,你有一些解释也应该对mysql有效(mysqldb也遵循PEP249 dba api指导2.0:这里是mysqldb的例子)
jrd*_*oko 10
要在Python字符串格式化表达式中转义&符号,请将&符号加倍:
'%%%s%%' % search_string
Run Code Online (Sandbox Code Playgroud)
编辑:但我绝对同意另一个答案.SQL查询中的直接字符串替换几乎总是一个坏主意.