MySQL Update запрос для строк, не соответствующих каким -либо записям в DataFrame?MySql

Форум по Mysql
Ответить
Anonymous
 MySQL Update запрос для строк, не соответствующих каким -либо записям в DataFrame?

Сообщение Anonymous »

У меня есть таблица mysql < /p>

Код: Выделить всё

+----+------+------+------+
| ID | x    | y    | z    |
+----+------+------+------+
|  1 |    1 | a    |    2 |
|  2 |    1 | b    | NULL |
|  3 |    1 | c    | NULL |
|  4 |    2 | a    | NULL |
|  5 |    2 | b    |    1 |
|  6 |    2 | c    |    2 |
|  7 |    3 | a    |    1 |
|  8 |    3 | b    | NULL |
|  9 |    3 | c    | NULL |
+----+------+------+------+
< /code>
, в котором я хочу обновить значения в столбце z < /code>
на основе Pandas DataFrame < /p>
lst = [{'ID': 3, 'x': 1, 'y': 'c'},
{'ID': 4, 'x': 2, 'y': 'a'},
{'ID': 8, 'x': 3, 'y': 'b'}]

df = pd.DataFrame(lst)
Я хочу установить значение z на 3 для этих строк, удовлетворяющих

[*] Приведенное значение для z - null , а
Сочетание значения для x и значение y не представлено в lipr. /> < /ol>
Это соответствует строкам 2 и 9 в таблице.
Могу ли я сделать это с одним запросом?import pandas as pd
import mysql.connector
from mysql.connector import errorcode

import configparser
config = configparser.ConfigParser()
config.read('config.ini')
mysql_host = config['mysql']['host']
mysql_database = config['mysql']['database']
mysql_user = config['mysql']['user']
mysql_password = config['mysql']['password']

connection = mysql.connector.connect(
database = mysql_database,
host = mysql_host,
user = mysql_user,
password = mysql_password
)
cursor = connection.cursor()

values = df[['x', 'y']].values.tolist()

query = "UPDATE my_table SET z = 3 WHERE z IS NULL AND NOT (x = %s AND y = %s)"

cursor.executemany(query, values)
connection.commit()
< /code>
Это не работает: он изменяет все значения NULL < /code> на 3 < /code>.
Очевидно, coursor.executemany < /code> итерации по элементам в значениях < /code>,
, чтобы это не думает. Часть в запросе рассматривается?
и эффективно обновляя только строки 2 и 9 в таблице? Но это менее прямое. Нет ли прямого способа, где манипуляция выполняется внутри MySQL, используя запрос и DataFrame? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/795 ... -dataframe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»