gpt4 book ai didi

python - Python3 中的 mysql select 返回先前更新的结果

转载 作者:行者123 更新时间:2023-11-29 12:50:16 24 4
gpt4 key购买 nike

我在服务器上运行一个脚本,该脚本更新 MySQL 数据库中的项目列表,以便由在我的桌面上运行的另一个脚本处理。该脚本循环运行,每 5 分钟处理一次列表(服务器端脚本也以 5 分钟为周期运行)。在第一个循环中,脚本检索当前列表(基本 SELECT 操作),在第二个循环中,它获取相同版本(未更新)的列表,在第三个循环中,它获取应在第二遍中获取的列表。在第一次之后的每次传递中,SELECT 操作都会返回上一个 UPDATE 操作中的数据。

def mainFlow():
activeList=[]
d=()
a=()
b=()
#cycleStart=datetime.datetime.now()
cur = DBSV.cursor(buffered=True)
cur.execute("SELECT list FROM active_list WHERE id=1")
d=cur.fetchone()
DBSV.commit()
a=d[0]
b=a[0]
activeList=ast.literal_eval(a)
print(activeList)
buyList=[]

clearOrders()
sellDecide()
if activeList:
for i in activeList:
a=buyCalculate(i)
if a:
buyList.append(i)
print ('buy list: ',buyList)
if buyList:
buyDecide(buyList)
cur.close()
d=()
a=()
b=()
activeList=[]

print ('+++++++++++++END OF BLOCK+++++++++++++++')


state=True
while state==True:
cycleStart=datetime.datetime.now()
mainFlow()
cycleEnd=datetime.datetime.now()
wait=300-(cycleEnd-cycleStart).total_seconds()
print ('wait=: ' +str(wait))
if wait>0:
time.sleep(wait)

正如你所看到的,我正在重新初始化所有变量,我正在关闭游标,我正在执行一个 commit() 操作来解决此类问题,我尝试过普通游标和带有buffer 设置 True 和 False,总是得到相同的结果。

当我从 MySQL Workbench 运行完全相同的 Select 查询时,返回的结果很好。

很困惑,坚持了两天。

最佳答案

您在 UPDATE/INSERT/DELETE 事务之前执行 COMMIT

虽然 SELECT 语句理论上是 DML它与 INSERT、UPDATE 和 DELETE 有一定的区别,因为它不会修改数据库内的数据。如果您想查看在另一个 session 中已更改的数据,则必须仅在更改后提交它。每次循环后关闭光标会部分加剧这种情况。

你在试图解决这个问题上已经走得太远了;无需重置 mainFlow() 方法中的所有内容(而且我看不到大多数变量的需要)

def mainFlow():

buyList = []

cur = DBSV.cursor(buffered=True)
cur.execute("SELECT list FROM active_list WHERE id = 1")

activeList = cur.fetchone()[0]
activeList = ast.literal_eval(activeList)

clearOrders()
sellDecide()

for i in activeList:
a = buyCalculate(i)
if a:
buyList.append(i)

if buyList:
buyDecide(buyList)

DBSV.commit()
cur.close()

while True:

cycleStart = datetime.datetime.now()
mainFlow()
cycleEnd = datetime.datetime.now()

wait = 300 - (cycleEnd - cycleStart).total_seconds()

if wait > 0:
time.sleep(wait)

我删除了相当多不必要的代码(并添加了空格),删除了不同事物的变量名的重用以及立即覆盖的变量声明。但这仍然不是很面向对象...

由于我们不详细了解您可能想要的 clearOrders()sellDecide()buyCalculate() 的具体内容自己仔细检查一下。

关于python - Python3 中的 mysql select 返回先前更新的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24859877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com