为什么PyMySQL delete query执行而不删除记录而没有错误?

2024-06-01 01:53:03 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我试图通过函数delEODTmp使用pymysql运行一个删除查询,但它没有做任何事情(即删除记录)。它也不会抛出任何错误,这使得它很难理解为什么它不起作用。在

故障排除:

1)函数retSQL的工作原理很像一个咒语,可以检索我向它抛出的任何选择字符串。这将确认我的用户登录设置是pymysql.connect的正确输入。我在同一个网络上从一个客户机到一个Mysql 5.7 server。在

2)在连接到具有相同凭据的同一服务器的同一客户机上,我可以:

  • workbench成功运行SQL DELETE FROM t_EOD_tmp;
  • phpMyAdmin成功运行SQL DELETE FROM t_EOD_tmp;

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

Tags: 函数from服务器closesql客户机connectconn
2条回答

在执行查询后,我认为您必须调用commit来将更改应用于数据库。在

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

希望这有帮助!在

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

conn.commit()

相关问题 更多 >