python 2.x и mysqldb 5: как игнорировать все символы в строке - PullRequest
0 голосов
/ 17 октября 2011

В настоящее время я работаю над сценарием Python, который извлекает данные из таблицы базы данных A и помещает все эти данные в базу данных B, которая не расположена рядом с базой данных A.при вызове вставки в базу данныхB я получаю сообщение об ошибке от модуля 1064 mysqldb:

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')

Я не уверен, что это из строки, содержащей кавычки без escape-символов, или HTML <>символов.

Есть ли способ заставить Python полностью игнорировать содержимое строки при выполнении вставки sql?

Я пробовал ' и " и ''' и""" вокруг команды sql, и хотя одна ситуация решает одну проблему, позже в строках она встречается с другим типом кавычек и выдает ошибки одинаково.

обе базы данных одинаковы с использованием utf8,я имитировал базу данных A, вот команда 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, запрашивающий имя таблицы.

1 Ответ

1 голос
/ 17 октября 2011

Вместо ("% s", "% s" и т. Д.) Значений вставки, просто сделайте (% s,% s и т. Д.)

Однако вам потребуется использовать форматирование строки, чтобы получить имя таблицы в SQL.

Вот пример с 2 столбцами вместо 40:

sql2 = "insert into" + bush + "(orders_id, customers_id) Values (%s, %s)"
cursor.execute(sql2, (r1, r2))

Все это (r1,r2, etc etc,r39,r40) выглядит чрезвычайно утомительно ... Я предлагаю вам рассмотреть возможность получения результатов вашего выбора в последовательность, называемую r. Затем вместо второй строки выше используйте cursor.execute(sql2, r)

...