【问题标题】:cursor.execute adding delimiters to my sql querycursor.execute 向我的 sql 查询添加分隔符
【发布时间】:2014-02-07 06:28:52
【问题描述】:

我正在为这段代码苦苦挣扎:

addXml = '<bar><foo>thingy</foo></bar>' 

sql = 'INSERT INTO table(col1,col2) VALUES(%s,%s);'                 

try:
  cursor = cnx.cursor()
  cursor.execute(sql, ('some_text', addXml))
  cursor.close()
except Exception, e:
  print cursor._last_executed
  print e

在我的每个 SQL 请求中,都会出现这个错误:

(1241, 'Operand should contain 1 column(s)')

我发现 cursor.execute 将我的 sql 请求修改为:

INSERT INTO table(col1,col2) VALUES('some_text',("'<bar><foo>thingy</foo></bar>'"));

而不是

INSERT INTO table(col1,col2) VALUES('some_text','<bar><foo>thingy</foo></bar>');

我相信 cursor.execute 正在添加分隔符 ("")。

我怎样才能消除这种行为?或者我该怎么办?

python version : 2.7.3 (default, Jan  2 2013, 13:56:14) [GCC 4.7.2]

谢谢

【问题讨论】:

    标签: python sql python-2.7 mysql-python


    【解决方案1】:

    您的代码在我的测试中运行良好,根据您提供的代码,我唯一能想到的就是对保留名称的引用。您的表名实际上是否称为表?我假设您是为了示例而编造的,但如果这是真实代码,您可能需要考虑为您的表使用不同的名称。以下是我执行的测试中相应的代码行: sql = 'INSERT INTO a(col1,col2) VALUES(%s,%s)'

    addXml = "<c><b>thingy</b></c>" 
    sql = 'INSERT INTO a(col1,col2) VALUES(%s,%s)'   
    try:
        cursor=db.cursor()
        cursor.execute(sql , ('some_text', addXml))
        cursor.close()
    except Exception, e:
        print cursor._last_executed
        print e
    

    无怨无悔地工作。希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回答。为了举例,我确实命名了我的表。事实上,它在我的每个参数周围添加了一些简单的引号(加上通常的双引号):/ 我得到了类似的东西: ("'g'", "'a'") 代替 addXml :/
    • 奇怪。您是否尝试过在执行函数之外为查询语句赋值?类似sql = 'INSERT INTO a(col1,col2) VALUES(%s,%s)' %("some_text", addXml) cursor.execute(sql)
    • 天哪,我现在明白了。它与光标如何解析我的字符串无关。我不明白python中字符串连接的真正概念。我正在做“bla”,var,“blo”,我期待“blafooblo”就像它适用于打印但不:D。无论如何感谢您的帮助:)
    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多