Почему PyMySQL выполняет запрос на удаление, но не удаляет записи без ошибок? - PullRequest
0 голосов
/ 11 июня 2018

Проблема:

Я пытаюсь выполнить запрос на удаление, используя pymysql через мою функцию delEODTmp, но он ничего не делает (т.е. удаляет записи).Он также не возвращает никаких ошибок, из-за чего трудно понять, почему он не работает.

Устранение неполадок:

1) Функция retSQL работает как чудо,извлечение любой выбранной строки, которую я выбрасываю.Это подтверждает, что мои настройки входа пользователя верны для pymysql.connect.Я делаю это с клиента на Mysql 5.7 server в той же сети.

2) На том же клиенте, подключающемся к тому же серверу с теми же учетными данными, что и я:

  • Выполните SQL DELETE FROM t_EOD_tmp; успешно с workbench
  • Выполните SQL DELETE FROM t_EOD_tmp; успешно с phpMyAdmin

3) Я попытался запустить скрипт py локально на сервере, но удалитьзапрос по-прежнему не работает.Результат тот же, что и у клиента.

Вопросы:

Кажется, что деструктивные запросы блокируются при выполнении из PyMySQL.Нужно ли мне что-то включать из Python, из MySQL?

Похоже, нет обширной документации по PyMySQL, поэтому, возможно, было бы лучше разработать ее с помощью другой библиотеки MySQL Python,Есть ли лучший способ?

Код:

import pymysql
import pandas

    query1 = '''SELECT * FROM t_EOD limit 1000;'''

    def retSQL(query):
    conn = pymysql.connect(host=myServer, port=myPort, user=myUsr, password=myPwd, db=myDB)
    df = pd.read_sql(query,conn)
    print(df.head(5)) 
    conn.close() # closeSQL connection

def delEODTmp():
    conn = pymysql.connect(host=myServer, port=myPort, user=myUsr, password=myPwd, db=myDB)
    cur = conn.cursor()
    q1 = '''DELETE FROM t_EOD_tmp;'''
    cur.execute(q1) 
        cur.close()
        conn.close()

retSQL(query1)
delEODTmp()

Ответы [ 2 ]

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

После выполнения вашего запроса, я думаю, вам нужно вызвать коммит, чтобы применить изменения к БД.

    @staticmethod
    def delete(query=None):
        """
        This methods deletes the record
        :param query:
        :return:
        """
        try:
            db.query(Users).\
                filter_by(**query).\
                delete()
            db.commit()
        except Exception as e:
            db.rollback()
            raise Exception(e.message)

Надеюсь, это поможет!

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

Вы должны будете зафиксировать изменения перед закрытием соединения:

conn.commit()

...