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;成功从workbenchSQL DELETE FROM t_EOD_tmp;成功从phpMyAdmin3)我尝试在服务器上本地运行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)
执行查询后,我认为您必须调用提交才能将更改应用到数据库。
@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)
希望这可以帮助 !