Python - 使用游标执行 SQL 查询,如何确定 SQL 是否有 > 0 个结果?
Python - use cursor to perform SQL query, how do I find out if there were > 0 results from SQL?
我有一个执行 SQL 查询的 python 游标,然后它将结果逐行输出到 CSV:
conn_string = "DRIVER={SQL Server};SERVER=sde-db;DATABASE=SDE;READONLY=True"
conn_sde = pypyodbc.connect(conn_string) # create connection object
cursor = conn_sde.cursor() # create cursor object
sql_query = """
SELECT
OBJECTID,
Property_Number
FROM
dbo.PROPERTIES
"""
cursor.execute(textwrap.dedent(sql_query))
## then iterates over cursor and writes rows ##
但我现在发现一个问题,即如果我的 SQL 找到零结果,它会使我的 python 脚本崩溃。
我想做以下类型的事情:
if len(cursor) > 0:
# write to CSV
else:
# do something else
我知道我找不到游标的 len(),那么我如何找到游标中的行数,如果行数大于 0 则仍然使用该游标?
我希望上面的内容很清楚...
我认为您正在寻找 cursor.rowcount
,如 Python 中指定的 PEP249
你可以做一个简单的:
cursor.execute(...)
rows = cursor.fetchall()
if rows:
# write to csv
for row in rows:
print (row)
else:
# do something else
行包含 select 子句中的所有值。
我认为你应该能够做到这一点:
all_rows = cursor.fetchAll()
if len(all_rows) > 0:
# write to CSV
else:
# do something else
@Benno,你快到了。你的方法是正确的。
步骤 1:首先获取游标中的行。
fetch_result = cursor.fetchall()
第 2 步: 检查是否已提取任何行
if fetch_result:
# Write to CSV
else:
# Whatever you want
我有一个执行 SQL 查询的 python 游标,然后它将结果逐行输出到 CSV:
conn_string = "DRIVER={SQL Server};SERVER=sde-db;DATABASE=SDE;READONLY=True"
conn_sde = pypyodbc.connect(conn_string) # create connection object
cursor = conn_sde.cursor() # create cursor object
sql_query = """
SELECT
OBJECTID,
Property_Number
FROM
dbo.PROPERTIES
"""
cursor.execute(textwrap.dedent(sql_query))
## then iterates over cursor and writes rows ##
但我现在发现一个问题,即如果我的 SQL 找到零结果,它会使我的 python 脚本崩溃。
我想做以下类型的事情:
if len(cursor) > 0:
# write to CSV
else:
# do something else
我知道我找不到游标的 len(),那么我如何找到游标中的行数,如果行数大于 0 则仍然使用该游标?
我希望上面的内容很清楚...
我认为您正在寻找 cursor.rowcount
,如 Python 中指定的 PEP249
你可以做一个简单的:
cursor.execute(...)
rows = cursor.fetchall()
if rows:
# write to csv
for row in rows:
print (row)
else:
# do something else
行包含 select 子句中的所有值。
我认为你应该能够做到这一点:
all_rows = cursor.fetchAll()
if len(all_rows) > 0:
# write to CSV
else:
# do something else
@Benno,你快到了。你的方法是正确的。
步骤 1:首先获取游标中的行。
fetch_result = cursor.fetchall()
第 2 步: 检查是否已提取任何行
if fetch_result:
# Write to CSV
else:
# Whatever you want