问题:
我正在尝试使用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()
答案 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)
希望这有帮助!