我有一个在服务器上运行的脚本,它更新MySQL数据库中的项目列表,以便由在我的桌面上运行的另一个脚本处理。脚本以循环方式运行,每5分钟处理一次列表(服务器端脚本也以5分钟为周期运行)。在第一个循环中,脚本检索当前列表(基本选择操作),在第二个循环中,它获取相同版本(未更新)的列表,在第三个循环中,它获取第二次传递时应该获取的列表。在第一次之后的每次传递中,SELECT操作都返回上一次更新操作的数据。你知道吗
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()操作来解决这类问题,我尝试了普通游标,以及缓冲区设置为True和False的游标,结果总是一样的。你知道吗
当我从MySQL工作台运行完全相同的Select查询时,返回的结果很好。你知道吗
困惑,坚持了两天。你知道吗
您正在更新/插入/删除事务之前执行提交
虽然SELECT语句在理论上是DML,但它与INSERT、UPDATE和DELETE有一定的区别,因为它不修改数据库中的数据。如果要查看在另一个会话中更改的数据,则必须在更改后提交它。每次循环后关闭光标会部分加剧这种情况。你知道吗
你在解决这个问题上做得太过分了;没有必要重置
mainFlow()
方法中的所有内容(而且我看不出有必要使用大多数变量)我已经删除了大量不必要的代码(并添加了空格),我已经删除了对不同事物的变量名的重用,以及对立即被覆盖的变量的声明。但这仍然不是很糟糕。。。你知道吗
由于我们对
clearOrders()
、sellDecide()
和buyCalculate()
的确切内容没有详细的了解,您可能需要自己仔细检查一下。你知道吗相关问题 更多 >
编程相关推荐