Pyodbc Connection 개체를 팬더와 함께 사용할 때 경고 표시
데스크톱에 3.8.5 대신 3.9.5가 설치된 VM 서버에서 실행되도록 파이썬 코드를 설정했을 때 발생한 다음 오류를 이해하려고 합니다.그게 중요한지는 모르겠지만, 이유의 일부일 수도 있습니다.
오류
C:\ProgramData\Miniconda3\lib\site-packages\pandas\io\sql.py:758: UserWarning: pandas only support SQLAlchemy connectable(engine/connection) or
database string URI or sqlite3 DBAPI2 connection
other DBAPI2 objects are not tested, please consider using SQLAlchemy
warnings.warn(
이 파일은 pyodbc 및 sqlalchemy fwiw를 가져오는 매우 간단한 .py 파일 내에 있습니다.경고를 생성하는 SQL 호출의 상당히 일반적이고 단순한 버전은 다음과 같습니다.
myserver_string = "xxxxxxxxx,nnnn"
db_string = "xxxxxx"
cnxn = "Driver={ODBC Driver 17 for SQL Server};Server=tcp:"+myserver_string+";Database="+db_string +";TrustServerCertificate=no;Connection Timeout=600;Authentication=ActiveDirectoryIntegrated;"
def readAnyTable(tablename, date):
conn = pyodbc.connect(cnxn)
query_result = pd.read_sql_query(
'''
SELECT *
FROM [{0}].[dbo].[{1}]
where Asof >= '{2}'
'''.format(db_string,tablename,date,), conn)
conn.close()
return query_result
파이썬에서 pyodbc를 사용하여 본 모든 예는 상당히 유사합니다.pyodbc가 더 이상 사용되지 않게 되었습니까?경고 없이 유사한 결과를 얻을 수 있는 더 좋은 방법이 있습니까?
pyodbc가 더 이상 사용되지 않게 되었습니까?
아니요. 적어도 지난 몇 년 동안 판다의 문서는 분명히 다음 중 하나를 원한다고 명시했습니다.
- 완전한 계획
Connectable
(즉, anEngine
또는Connection
객체), - SQL 화학 연결 URL을 포함하는 문자열, 또는
- SQLite DBAPI 연결입니다.
(SQL 화학으로의 전환은 거의 보편적이었지만 이전 버전과의 호환성을 위해 SQLite 연결을 계속 지원했습니다.)사람들이 다른 DBAPI 연결(예: pyodbc)을 전달하고 있습니다.Connection
읽기 작업을 위한 목적으로, 팬더는 지금까지 불평하지 않았습니다.
경고 없이 유사한 결과를 얻을 수 있는 더 좋은 방법이 있습니까?
예. 기존 ODBC 연결 문자열을 사용하여 SQL 화학을 생성할 수 있습니다.Engine
SQLAlchemy 1.4 설명서에 설명된 개체:
from sqlalchemy.engine import URL
connection_string = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=dagger;DATABASE=test;UID=user;PWD=password"
connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
from sqlalchemy import create_engine
engine = create_engine(connection_url)
그런 다음 SQL 화학을 사용합니다.engine
당신이 필요로 하는 판다 방법을 연구하는 것.예를 들어 SQLAlchemy 2.0 및 Panda 1.5.3의 경우:
import pandas as pd
import sqlalchemy as sa
# …
with engine.begin() as conn:
df = pd.read_sql_query(sa.text("SELECT 'thing' as txt"), conn)
저한테는 효과가 있어요.
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import pyodbc
import sqlalchemy as sa
import urllib
from sqlalchemy import create_engine, event
from sqlalchemy.engine.url import URL
server = 'IP ADDRESS or Server Name'
database = 'AdventureWorks2014'
username = 'xxx'
password = 'xxx'
params = urllib.parse.quote_plus("DRIVER={SQL Server};"
"SERVER="+server+";"
"DATABASE="+database+";"
"UID="+username+";"
"PWD="+password+";")
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
qry = "SELECT t.[group] as [Region],t.name as [Territory],C.[AccountNumber]"
qry = qry + "FROM [Sales].[Customer] C INNER JOIN [Sales].SalesTerritory t on t.TerritoryID = c.TerritoryID "
qry = qry + "where StoreID is not null and PersonID is not null"
with engine.connect() as con:
rs = con.execute(qry)
for row in rs:
print (row)
SQL 서버 이름 또는 IP 주소를 사용할 수 있지만 기본 DNS 목록이 필요합니다.그러나 대부분의 회사 서버에는 이미 이 목록이 있어야 합니다.다음을 사용하여 서버 이름 또는 IP 주소를 확인할 수 있습니다.nslookup
명령 프롬프트 뒤에 서버 이름 또는 IP 주소가 표시됩니다.
VMware에서 실행되는 Ubuntu 서버에서 SQL 2017을 사용하고 있습니다.저는 더 넓은 "Ubuntu에서 MSSQL 실행" 프로젝트의 일환으로 여기 IP 주소로 연결합니다.
윈도우즈 인증 정보로 연결하는 경우 매개 변수를trusted_connection
매개 변수
params = urllib.parse.quote_plus("DRIVER={SQL Server};"
"SERVER="+server+";"
"DATABASE="+database+";"
"trusted_connection=yes")
경고이므로 경고 파이썬 라이브러리를 사용하여 메시지를 억제했습니다.이것이 도움이 되길 바랍니다.
import warnings
with warnings.catch_warnings(record=True):
warnings.simplefilter("always")
#your code goes here
우리 회사는 SQL 화학을 사용하지 않습니다. pscycopg2 기반의 포스트그레스 연결을 선호하고 다른 기능을 통합합니다.할 수 됩니다. 과 같이 시작합니다. 다음과 같이 시작합니다.python3 -W ignore
SQL에 대한 은 다음과 .1.4.36
사용 중:
import pandas as pd
from sqlalchemy import create_engine, event
from sqlalchemy.engine.url import URL
#...
conn_str = set_db_info() # see above
conn_url = URL.create("mssql+pyodbc", query={"odbc_connect": conn_str})
engine = create_engine(conn_url)
df = pd.read_sql(SQL, engine)
df.head()
언급URL : https://stackoverflow.com/questions/71082494/getting-a-warning-when-using-a-pyodbc-connection-object-with-pandas
'programing' 카테고리의 다른 글
pymongo를 사용하여 mongodb에서 쿼리 날짜를 만드는 방법은 무엇입니까? (0) | 2023.07.04 |
---|---|
MongoDB Embedded Objects에 ID(null 값)가 없습니다. (0) | 2023.07.04 |
다양한 경우에 테이블 열을 기준으로 정렬하려면 어떻게 해야 합니까(Oracle) (0) | 2023.07.04 |
c# 메모리 스트림 대 바이트 어레이 (0) | 2023.07.04 |
R에 data.frame을 저장하는 방법은? (0) | 2023.07.04 |