【发布时间】:2011-10-17 03:31:28
【问题描述】:
我目前正在编写一个 python 脚本,该脚本从 databaseA 上的表中提取数据,并将所有数据放入不在 databaseA 附近的 databaseB 中。在调用数据库 B 的插入时,我从 mysqldb 模块 1064 收到错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'1">&reg;</font></sup>)", "somewords", "", "somewords", "some more words", "00000XXXXX\' at line 1')
我不确定它是来自包含没有转义的引号的字符串,还是来自 html 字符。
有什么方法可以让python在进行sql插入时完全忽略字符串的内容?
我在 sql 命令周围尝试了 ' 和 " 和 ''' 和 """,虽然一种情况解决了一个问题,但后来它遇到了另一种引用和错误同样的方式。
两个数据库都是一样的使用utf8,我模仿了databaseA,这里是sql命令sql2 =
'''insert into %s (orders_id, customers_id, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country,
customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state,
delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id,
payment_method, payment_module_code, shipping_method, shipping_module_code, coupon_code, cc_type, cc_owner, cc_number, cc_expires, cc_cvv, last_modified, date_purchased, orders_status, orders_date_finished,
currency, currency_value, order_total, order_tax, paypal_ipn_id, ip_address) Values ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s",
"%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s","%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")''' %
(bush, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r40, r41, r42, r43,
r44, r45, r46, r47, r48, r49, r50, r51)
bush,是一个询问表名的 raw_input。
【问题讨论】:
-
你能发布你的插入语句吗?两个数据库的字符编码是否不同? (即,一个是 UTF-8,另一个是拉丁语吗?)
-
这是因为您执行不正确的查询。
-
您可能正在使用字符串格式构建 INSERT 语句,而不是使用参数替换。向我们展示您正在进行的 cursor.execute() 调用,如果第一个 arg 是较早组成的,那么也向我们展示这段代码。
-
告诉我:光标没有“选择”属性。但是,在 select 所在的位置使用执行,并执行您建议我做的所有其他事情。非常感谢。
-
@helmet648:是的,“选择”是个脑筋急转弯;我已经编辑了答案来解决这个问题。请考虑接受我的答案(点击答案旁边的大“勾”)。
标签: python quotes mysql-python