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

时间:2018-06-11 04:48:55

标签: 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执行时,似乎阻止了破坏性查询。 我是否需要从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 :(得分:2)

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

conn.commit()

答案 1 :(得分:2)

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

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

希望这有帮助!