使用Python中的connectorx从MS SQL Server读取SQL表

问题描述 投票:0回答:1

我正在尝试使用Jupyter Notebook中Python Polars中的connectorx从MS SQL Server 2014读取sql表。

我的代码:

#importing libraries

import pyarrow
from connectorx import read_sql
import polars as pl
import os
import gensim
import spacy
import csv
import numpy as np
import pandas as pd

#loading spacy language model

nlp = spacy.load("de_core_news_lg")

#reading sql tables and creating connection

connection = "mssql://username:password@PAMUK5AM100:1433/db"
user = "SELECT * FROM v_Text"
questions = "SELECT * FROM v_Questions"

#reading sql tables and creating dataframes

user_df = pl.read_sql(user, connection)

questions_df = pl.read_sql(questions, connection)

运行此命令后,我收到此错误:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
Input In [24], in <cell line: 3>()
      1 #reading sql tables and creating dataframes
----> 3 user_df = pl.read_sql(user, connection)
      5 questions_df = pl.read_sql(questions, connection)

File ~\Anaconda3\lib\site-packages\polars\io.py:1105, in read_sql(sql, connection_uri, partition_on, partition_range, partition_num, protocol)
   1100 except ImportError:
   1101     raise ImportError(
   1102         "connectorx is not installed. Please run `pip install connectorx>=0.3.1`."
   1103     ) from None
-> 1105 tbl = cx.read_sql(
   1106     conn=connection_uri,
   1107     query=sql,
   1108     return_type="arrow2",
   1109     partition_on=partition_on,
   1110     partition_range=partition_range,
   1111     partition_num=partition_num,
   1112     protocol=protocol,
   1113 )
   1115 return cast(DataFrame, from_arrow(tbl))

File ~\Anaconda3\lib\site-packages\connectorx\__init__.py:257, in read_sql(conn, query, return_type, protocol, partition_on, partition_range, partition_num, index_col)
    254 except ModuleNotFoundError:
    255     raise ValueError("You need to install pyarrow first")
--> 257 result = _read_sql(
    258     conn,
    259     "arrow" if return_type in {"arrow", "polars"} else "arrow2",
    260     queries=queries,
    261     protocol=protocol,
    262     partition_query=partition_query,
    263 )
    264 df = reconstruct_arrow(result)
    265 if return_type in {"polars", "polars2"}:

RuntimeError: Timed out in bb8

我做错了什么?我已经安装了 pyarrow 和connectorx,但仍然不断收到此错误。请帮忙。 谢谢你。

python sql-server pyarrow python-polars
1个回答
0
投票

有 2 种(目前为 Polars v1.7.0)不同的方式从 Polars 连接到数据库:

1。使用 ODBC 连接字符串/SqlAlchemy 连接。

方法称为

read_database()
,它有
connection
参数:

查询的实例化连接(或游标/客户端对象) 可以针对执行。还可以传递有效的 ODBC 连接字符串, 如果它包含字符串“Driver={…}”,则被识别为此类,其中 在这种情况下,arrow-odbc 包将用于建立连接 并将 Arrow 原生数据返回至 Polars。异步驱动程序连接是 也支持,尽管目前这被认为不稳定。

ODBC 连接使用的简单示例可能如下所示:

conn = """
    Driver={SQL Server Native Client 11.0};
    Server=server;
    Database=db;
    Uid=username;
    Pwd=password;
    Trusted_Connection=yes;
"""

df = pl.read_database("select * from table", conn)

您可以在此处查看连接字符串的可能参数 - sql server 连接字符串

2。使用connectorX或adbc引擎

方法称为

read_database_uri
。它接受
uri
参数:

以以下字符开头的连接器x 或 ADBC 连接 URI 字符串 后端的驱动名称,例如:

  • “postgresql://用户:pass@服务器:端口/数据库”
  • “雪花://用户:pass@account/database/schema?warehouse=warehouse&role=role”

调用者负责转义中的任何特殊字符 字符串,它将“按原样”传递给底层引擎(这是 当遇到特殊字符时最常需要 密码)。

理论上这应该可行,但到目前为止我还无法让它在我的机器上运行(我不是唯一的人 - 请参阅github.com):

conn = "mssql://user:pwd@server:port/db"

pl.read_database_uri("select * from table", conn)

在此处查看有关连接器x的一些信息 - MsSQL Connection

© www.soinside.com 2019 - 2024. All rights reserved.