【问题标题】:Unicode charactered filename SELECT SQL parameter issueUnicode 字符文件名 SELECT SQL 参数问题
【发布时间】:2013-01-17 13:06:00
【问题描述】:

我在 django 中创建了一个 webapp/webservice 方法,它将 unicode 字符文件名存储在 DB 表中。我在views.py脚本上通过这个方法来做:

SubmissionContents(id=subid, filename=fn.decode('unicode_escape')).save()

我这样做是因为我遇到了一些 unicode 字符的文件名,这些文件名没有正确存储在数据库中(不管是什么原因,我仍然不知道)。这也是对这个stackoverflow thread/link的建议:

现在在后端,我有一个普通的 python 脚本,它使用 MySQLdb-python 模块来查询所述数据库。我的查询是这样的:

filename = (u"%s").encode('unicode_escape')
cursor.execute('select * from `submissioncontents` 
                where `submissioncontents`.`filename` = "%s"' 
                % filename.decode('unicode_escape'))

问题是没有返回匹配项,尽管我非常确定 DB 表中填充了这样的值。应该如何正确查询?

提前致谢!

【问题讨论】:

  • 您是否打算进行 LIKE 搜索?
  • 能输出游标要执行的SQL命令吗?我猜你可能无法做到,但从它应该匹配的行中的字段中获取值会让你注意到编码造成的任何明显差异。
  • 等等,这里发生了什么:(u"%s").encode('unicode_escape')?您的意思是在转义之前使用带有 unicode 的实际文件名对其进行格式化吗?

标签: python sql django unicode mysql-python


【解决方案1】:

Check right syntax:

cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])

对于您的代码:

cursor.execute('select * from `submissioncontents` 
                where `submissioncontents`.`filename` = %s' 
                , [ filename.decode('unicode_escape') ] )

引用文档:

“不要对原始查询使用字符串格式!”

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 2015-11-18
    • 1970-01-01
    • 2013-10-18
    • 2011-11-12
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多