我正在尝试使用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,但仍然不断收到此错误。请帮忙。 谢谢你。
有 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。