【问题标题】:How to read sql server view in python?如何在 python 中读取 sql server 视图?
【发布时间】: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


【解决方案1】:

我不确定你在哪里读到的,但从视图中读取数据应该是直截了当的:

import pyodbc
conn = pyodbc.connect ('CONNECTION_STRING')

cursor=conn.cursor()
cursor.execute('SELECT * FROM VIEW')

for row in cursor:
    print(row)

【讨论】:

  • 它会导致空 json 响应。没有这样的错误,只是它返回了一个空 Json。
【解决方案2】:

它起作用了,问题是我的驱动程序已经过时了。我将我的 SQL 驱动程序更新到 17。然后我能够连接到我的 sql 视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    • 2010-12-06
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多