为什么pymysql执行delete查询,但不删除记录而不出错?

9bfwbjaz  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(552)

问题:
我正在尝试使用运行删除查询 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脚本,但是delete查询仍然不起作用。与客户的结果相同。
问题:
从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()
4xy9mtcn

4xy9mtcn1#

在执行查询之后,我认为您必须调用commit来将更改应用到db。

@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)

希望这有帮助!

ubby3x7f

ubby3x7f2#

您必须在关闭连接之前提交更改: conn.commit()

相关问题