Разобрать результат запроса, чтобы вставить его в другую базу данных - PullRequest
0 голосов
/ 05 июня 2018

После выполнения запроса из базы данных MySQL я получаю следующий результат:

(datetime.date(2000, 11, 11), u'superuser', datetime.date(2000, 11,11),u'yes')
(datetime.date(2001, 11, 11), u'superuser', datetime.date(2001, 11,11),u'yes')
(datetime.date(2002, 11, 11), u'superuser', datetime.date(2002, 11,11),u'yes')
(datetime.date(2003, 11, 11), u'superuser', datetime.date(2003, 11,11),u'yes')

Эти результаты получены из базы данных, которая имеет четыре столбца:

last_login | is_superuser | data_joined | is_active

Моя проблема заключается в том, чтоМне нужно вставить эти данные в другую базу данных, которая имеет такую ​​же структуру, но мне нужно проанализировать данные таким образом, чтобы MySQL смог принять запрос:

 INSERT INTO  auth_user.auth_user (last_login, is_superuser, data_joined, 
 is_active) VALUES 
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes')[...];

Я изо всех сил пытаюсь получить этоформат из предыдущего, есть ли у кого-нибудь предложение, как подойти к этой проблеме?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Используйте executemany() и параметризованный запрос.Учитывая, что результаты предыдущего запроса хранятся в виде списка кортежей с именем results:

query = """INSERT INTO  auth_user.auth_user
           (last_login, is_superuser, data_joined, is_active)
           VALUES (%s, %s, %s, %s)"""

# If your driver's cursors don't work as context managers, wrap with
# contextlib.closing
with conn.cursor() as cursor:
    cursor.executemany(query, results)

conn.commit()

Ваш драйвер знает, как передавать обычные объекты Python, такие как date, datetime,строки и числа при использовании параметризованных запросов.

В зависимости от используемого драйвера executemany() может оптимизировать или не оптимизировать передачу нескольких значений.Например, MySQL Connector и PyMySQL оптимизируют операторы INSERT.

0 голосов
/ 05 июня 2018

Ваши результаты являются кортежами ... просто создайте подходящий запрос SQL, и execute() it:

query = 'INSERT INTO auth_user.auth_user'                       \
          ' (last_login, is_superuser, data_joined, is_active)' \
          ' VALUES (%s, %s, %s, %s);'

for result in results:
    cursor.execute(query, result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...