我想从VPS中的Mysql数据库中的表中获取并打印所有记录,但是当我使用for循环打印所有检索到的记录时,我将它们打印了2-3次,而不仅仅是1次。
#!/usr/bin/env python
#Modules imported
# VPS
# Parameters to connecto to de DB in the VPS
def connDB():
global conn
global cur
try:
conn = MySQLdb.connect(DBhost, DBuser, DBpass, DBdb, charset='utf8', use_unicode=True)
cur = conn.cursor()
print("...DB VPS connect")
except:
print("...DB VPS ERROR")
pass
def selectallDB(query):
global conn
global cur
try:
cur.execute(query)
localrpis = cur.fetchall()
conn.commit()
print("... select All OK")
print('Total Row(s):', cur.rowcount)
for i in localrpis:
print(i)
except:
print("... select ERROR")
connDBLocal()
pass
def getallDB():
c_select = """
SELECT * FROM %s
"""%(trpistmsMCSIR)
selectallDB(c_select)
def checktime(sec):
# Function to trigger the read data funtion from "sec" to "sec"
while True:
res = round(time()%sec)
if res==0.0:
getallDB()
sleep(0.2) # Changed to 0.5
connDB()
while True:
checktime(10)
我假设for
内部的try
循环执行了2次(有时甚至3次),但我不明白为什么。
...DB connect
...DB VPS connect
... select All OK
('Total Row(s):', 2L)
('SELECT result OK')
... select All OK
('Total Row(s):', 2L)
('SELECT result OK')
作为一个变通方案,经过许多更改,我得到了“工作”,将sleep(0.2)更改为sleep(0.5),但是我不确定这是否可以解决问题,或者只是幻想循环正在按预期工作
答案 0 :(得分:0)
从重复的for
行可以看出,这不是... select All OK
循环。问题是您的while
循环,因为round(0.2)
等于0.0
。这就是为什么在制作0.5
时将其固定。从理论上讲,如果数据库操作足够快,它也可以运行3次(分别在0.0、0.2和0.4秒)。
如果您想每10秒钟运行一次代码,那么在两次检查之间sleep
秒0.5
秒是一个不错的选择。