Upsert в mariadb / mysqldb - PullRequest
       7

Upsert в mariadb / mysqldb

0 голосов
/ 03 октября 2019
I have created a table as below:

    +------------------+--------------+------+-----+------------+----------------+
    | Field            | Type         | Null | Key | Default    | Extra          |
    +------------------+--------------+------+-----+------------+----------------+
    | category         | varchar(20)  | NO   |     | NULL       |                |
    | report_id        | int(5)       | NO   | PRI | NULL       | auto_increment |
    | name             | varchar(255) | NO   | UNI | NULL       |                |
    | URL              | varchar(200) | NO   |     | NULL       |                |
    | refresh_type     | varchar(30)  | NO   |     | On Request |                |
    | create_dt        | date         | NO   |     | 9999-01-01 |                |
    | modified_dt      | date         | NO   |     | 9999-01-01 |                |
    | project_type     | varchar(60)  | YES  |     | NULL       |                |
    | project_name     | varchar(60)  | YES  |     | NULL       |                |
    | project_location | varchar(255) | YES  |     | NULL       |                |
    +------------------+--------------+------+-----+------------+----------------+

Я также вставил записи в это. Я пытаюсь автоматизировать процесс вставки и обслуживания и получаю только несколько столбцов, таких как категория, имя и URL, из потока данных.

В соответствии с процессом пользователь может обновлять записи и изменять другиеполя, чтобы сделать их полезными, и в следующий раз, когда я пытаюсь вставить записи, я хочу выполнить upsert на основе имени. Я выполняю процесс с использованием Python. вот шаги, которые я попробовал:

        dash= df.loc[:,['folder','name','url','url']].values.tolist()

        dash_insert_sql= ("""insert into dashboards (category 
                                                   ,name
                                                   ,URL
                                                   ) values (%s,%s,%s)
                                                   on duplicate key update URL = values(%s) """)

        cur.executemany(dash_insert_sql, dash)

Когда я пытаюсь это сделать, я получаю

    Traceback (most recent call last):
      File "C:\Python\Mysql\report_uri.py", line 65, in <module>
        cur.executemany(dash_insert_sql, dash)
      File "C:\Python\lib\site-packages\MySQLdb\cursors.py", line 228, in executemany
        q_prefix = m.group(1) % ()
    TypeError: not enough arguments for format string

Вот пример данных:

Мой ввод - списоксписков.

[['Информация об ученике', 'Активные студенты не запланированы', 'https://example.com/SASReportViewer/?reportUri=/reports/reports/af4f7325-860f-4958-ad83-bb900f726b32&page=vi6',' https://example.com/SASReportViewer/?reportUri=/reports/reports/af4f7325-860f-4958-ad83-bb900f726b32&page=vi6'], ['Информация об ученике', 'Статистическое сравнение поступлений из снимков', 'https://example.com/SASReportViewer/?reportUri=/reports/reports/6150909f-3ab4-4ec7-8ef0-7efdb1f09300&page=vi6', 'https://example.com/SASReportViewer/?reportUri=/reports/reports/6150909f-3ab4-4ec7-8ef0-7efdb1f09300&page=vi6']]

Пожалуйста, дайте мне знать, как поступить или где я ошибаюсь. Спасибо.

1 Ответ

0 голосов
/ 03 октября 2019

dash = df.loc [:, ['folder', 'name', 'url']]. Values.tolist ()

    dash_insert_sql= ("""insert into dashboards (category 
                                               ,name
                                               ,URL
                                               ) values (%s,%s,%s)
                                               on duplicate key update URL = values(URL) """)

Я проверил это, изменив URL отчетас этим другим, и он обновил URL, и новые строки не были добавлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...