为什么PyMySQL删除查询执行但不删除记录没有错误?

bas*_*ann 0 python mysql phpmyadmin mysql-workbench

问题:

我正在尝试使用pymysql通过我的函数运行删除查询,delEODTmp但它没有做任何事情(即删除记录)。它也不会返回任何错误,因此很难理解它为什么不起作用。

故障排除:

1) 函数 retSQL 就像一个魅力,检索我扔给它的任何 Select 字符串。这确认我的用户登录设置正确输入到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()
Run Code Online (Sandbox Code Playgroud)

小智 6

您必须在关闭连接之前提交更改:

conn.commit()


viz*_*tiz 5

执行查询后,我认为您必须调用提交才能将更改应用到数据库。

    @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)
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !