<p>我把最后一次加上1毫秒,并把“>;”改为“>;=”,就解决了这个问题。由于毫秒是当前MS-SQL中最小的时间增量,因此该方法不应丢失任何数据。在</p>
<p>我怀疑这与Python处理浮点数有关,但不能肯定的是,将1毫秒的浮点数加到秒数部分并没有完全增加它。在</p>
<p>修订代码:</p>
<pre><code>import pyodbc # version 4.0.24
import time
import datetime
import json
con = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};SERVER=localhost;DATABASE=mydb;UID=myuid;PWD=mypwd")
cur = con.cursor()
i = 0
lastDatetime = datetime.datetime.strptime('01Jan1970', '%d%b%Y')
while i < 60:
print("{0}: SELECT * FROM dbo.Data WHERE datetime >= '{1}'".format(str(i), lastDatetime))
cur.execute("SELECT * FROM dbo.Data WHERE datetime >= ?", lastDatetime)
rows = cur.fetchall()
for k, v in enumerate(rows):
jsonMsg = json.dumps({
"transaction_id": v[1],
"plu": v[2].strip(),
"qty": int(v[3]),
"dateTime": str(v[4])
}, separators=(',', ':'))
print(str(jsonMsg))
lastDatetime = v[6]
# work around a bug with datetime > returning as if >=
lastDatetime = lastDatetime + datetime.timedelta(milliseconds=1)
print("lastDatetime set to: {0}".format(lastDatetime))
i = i + 1
time.sleep(5)
</code></pre>