3 回答

TA貢獻1810條經驗 獲得超4個贊
下面的代碼完成了這項工作,已經測試過了。如果出現問題,您可能需要糾正一些縮進問題。
import pymysql
def run_mysql(query1, query2):
try:
conn = pymysql.connect(host='localhost', user='root', passwd='', db='data_new_es')
cursor = conn.cursor()
cursor.execute(query1)
cursor.execute(query2)
row = cursor.fetchone()
print(row)
except Exception as e:
print(str(e))
finally:
cursor.close()
conn.close()
mysqlquery1 = "set @Yesterday = curdate() -1 ;"
mysqlquery2 = "select * from abcde where date(accrual_date) =
date(@Yesterday)"
df1 = run_mysql(mysqlquery1,mysqlquery2)

TA貢獻1804條經驗 獲得超2個贊
我想是因為有兩個語句,這個函數只允許同時讀取和執行一個。根據 pandas read_sql 文檔,您可以使用 read_sql "params" 關鍵字參數來解決此問題并將 @Yesterday 值計算移至 python 端:
import pymysql
import pandas as pd
from datetime import datetime, timedelta
def run_mysql(SQLQ, params):
conn = pymysql.connect(host='IP address', user='username', passwd='password', db='database name')
df = pd.read_sql(SQLQ, conn, params=params)
conn.close()
return df
mysqlquery = '''SELECT * FROM mt4_daily
where date(time) = date(%(yesterday)s)
'''
yesterday = datetime.date(datetime.now())- timedelta(days=1)
params = {'yesterday': yesterday}
df = run_mysql(mysqlquery, params)
display(df)
我無法執行代碼,但想法是這樣的。

TA貢獻1829條經驗 獲得超13個贊
嘗試將它們作為兩個單獨的查詢運行。
mysql_query = '''set @Yesterday = curdate() -1 ;'''
df = run_mysql(mysql_query)
mysql_query = '''SELECT * FROM mt4_daily
where date(time) = date(@Yesterday)
'''
df = run_mysql(mysql_query)
添加回答
舉報