【发布时间】:2022-08-16 05:19:44
【问题描述】:
我正在尝试从 sql 视图中读取一些数据。我是 pyodbc 驱动程序,我发现 pyodbc 无法读取视图。有没有办法在 python 函数中读取 sql 视图?
这是一段示例代码:
import logging
import json
import pyodbc
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
server = \'***.database.windows.net\'
database = \'**\'
username = \'**\'
password = \'**\'
driver = \'{SQL Server Native Client 11.0}\'
cnxn = pyodbc.connect(\'DRIVER=\'+driver+\';PORT=1433;SERVER=\'+server +
\';PORT=1443;DATABASE=\'+database+\';UID=\'+username+\';PWD=\' + password)
if req.method == \'GET\':
result = []
logging.info(\'Python HTTP trigger function processed a request.\')
name = req.params.get(\'name\')
if not terminal_name:
try:
req_body = req.get_json()
except ValueError:
return func.HttpResponse(
\"Invalid input Json response\",
status_code=401
)
else:
name = req_body.get(\'name\')
id = req_body.get(\'id\')
query = f\"\"\"
Select distinct([product_type]), product_grade from cns_terminal_cockpit.v_terminal_outage
where terminal_id ={id} and lower(name) = \'{name}\'
and product_grade <> \'\'
\"\"\"
cursor = cnxn.cursor()
try:
cursor.execute(query)
except TypeError:
return func.HttpResponse(
\'Failed. The issue is with the query\',
status_code=402
)
for row in cursor.fetchall():
result.append(
dict(zip([column[0] for column in cursor.description], row))
)
del cnxn
return func.HttpResponse(
json.dumps(result, default=str),
mimetype=\"application/json\",
status_code=200
)
else:
return func.HttpResponse(
\'Wrong request method was posted, please use GET method\',
status_code=403
)
我输出 json 我得到的是 [] 和 status_code = 200。但是在后端,我在视图中有一些数据。当我查询一个普通的数据库表时,同样的代码工作就像一个魅力。
我研究了其他库,如 pymysql、jdbc。但似乎没有一个按预期工作。
-
你能告诉我们你的代码的相关部分吗?当你运行它时会发生什么?你有错误吗?如果是这样,什么错误?
-
同意,请发布代码和错误,以及指向您发现此内容的链接。不然别人会来看pyodbc 无法从视图中选择.这是非常非常可能不正确的。现在,也许你在这方面使用的任何东西,比如 ORM,都有一些问题。但是,那不在 pyodbc 本身。
-
它会导致空 json 响应。这样没有错误,只是它返回了一个空Json。我正在使用 Pyodbc 连接器,我没有收到任何错误,
-
请edit你的问题表明你在
print(query)时得到了什么 -
distinct([product_type]),括号中只有一个选定的列(和)是有效的 SQL 语法(对于 MSSQL)吗?您是否通过使用except TypeError:(过于具体)而不是仅使用except:来丢弃错误(如果它无效)?
标签: python azure jdbc azure-functions odbc