【发布时间】:2018-09-01 01:46:20
【问题描述】:
我正在尝试查询 Microsoft SQL 数据库以获取上一个循环中返回的日期时间之后的所有记录。我使用“>”运算符,但我看到的结果是“>=”(大于或等于)。
Python (3.6.5 Win10) 脚本:
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]
print("lastDatetime set to: {0}".format(lastDatetime))
i = i + 1
time.sleep(5)
生产:
0: SELECT * FROM dbo.Data WHERE datetime > '1970-01-01 00:00:00'
{"transaction_id":3201,"plu":"3","qty":1,"dateTime":"2018-08-01 10:45:40.560000"}
lastDatetime set to: 2018-08-01 10:45:40.560000
{"transaction_id":3202,"plu":"5","qty":1,"dateTime":"2018-08-01 10:45:51.563000"}
lastDatetime set to: 2018-08-01 10:48:47.653000
{"transaction_id":3230,"plu":"8","qty":2,"dateTime":"2018-08-01 10:48:47.653000"}
lastDatetime set to: 2018-08-01 10:48:47.653000
1: SELECT * FROM dbo.Data WHERE datetime > '2018-08-01 10:48:47.653000'
{"transaction_id":3230,"plu":"8","qty":2,"dateTime":"2018-08-01 10:48:47.653000"}
lastDatetime set to: 2018-08-01 10:48:47.653000
2: SELECT * FROM dbo.Data WHERE datetime > '2018-08-01 10:48:47.653000'
{"transaction_id":3230,"plu":"8","qty":2,"dateTime":"2018-08-01 10:48:47.653000"}
lastDatetime set to: 2018-08-01 10:48:47.653000
我在 SQL Server Management Studio 中运行查询并得到预期结果:
SELECT * FROM dbo.Data WHERE datetime > '2018-08-01 10:48:47.653'
不返回任何记录。
我遗漏了什么或者我应该在 python 脚本中更改什么以获得预期的结果?
谢谢。
编辑: 将 '' 添加到数据时间周围的 sql 字符串的打印中。对结果没有影响。
【问题讨论】:
-
您在查询中缺少撇号 (') SELECT * FROM dbo.Data WHERE datetime > 2018-08-01 10:48:47.653000 它应该是 SELECT * FROM dbo.Data WHERE datetime > '2018 -08-01 10:48:47.653000'
-
@maziyank 你是对的,但它只是打印我认为是查询的内容。这不是代码下一行的实际查询。
标签: python sql sql-server python-3.x