我很难在python中获取一些sql以正确通过MySQLdb。是pythons字符串格式使我丧命。
我的sql语句使用带有通配符的LIKE关键字。我在Python中尝试了许多不同的方法。问题是一旦我使其中的一个工作,MySQLdb中就有一行代码以字符串格式处理。
尝试1:
“ SELECT tag.userId,count(user.id)作为totalRows,来自用户INNER JOIN标签上的user.id = tag.userId WHERE user.username LIKE’%% s%’”%(查询)
这是不行的。我得到值错误:
ValueError:索引128处不支持的格式字符’‘’(0x27)
尝试2:
“”选择tag.userId,count(user.id)作为totalRows,来自用户INNER JOIN标签上的user.id = tag.userId,其中user.username像’\ %% s \%’“%(查询)
我从尝试1得到相同的结果。
尝试3:
like =“ LIKE’%” + str(query)+“%’” totalq =“ SELECT tag.userId,count(user.id)as totalRows来自用户INNER JOIN标签ON user.id = tag.userId WHERE user.username “ +喜欢
这可以正确地创建totalq变量,但是现在当我去运行查询时,我从MySQLdb中得到了错误:
执行查询=查询%db.literal(args)中的文件“ build / bdist.macosx-10.6-universal / egg / MySQLdb / cursors.py”,第158行TypeError:格式字符串的参数不足
尝试4:
like =“ LIKE’\%” + str(query)+“ \%’” totalq =“ SELECT tag.userId,count(user.id)as totalRows FROM user INNER JOIN标签ON user.id = tag.userId WHERE用户.username“ +喜欢
这与尝试3的输出相同。
这一切似乎真的很奇怪。如何在python的sql语句中使用通配符?
这与字符串格式无关,而是问题在于如何根据Python中的db操作要求执行查询(PEP 249)
尝试这样的事情:
sql = "SELECT column FROM table WHERE col1=%s AND col2=%s" params = (col1_value, col2_value) cursor.execute(sql, params)
这是psycog2的一些示例,其中有一些对mysql同样有效的解释(mysqldb也遵循PEP249 dba api指南2.0:这是mysqldb的示例)