pyodbc를 사용하여 SQL에서 데이터 검색
pyodbc를 사용하여 SQL 서버에서 데이터를 검색하고 Python을 사용하여 표로 인쇄하려고 합니다.그러나 열 이름과 데이터 유형 등을 검색할 수 있을 뿐 열의 각 행에 있는 실제 데이터 값은 검색할 수 없습니다.
기본적으로 서버 데이터를 검색하여 표에 표시하는 Excel 시트를 복제하려고 합니다.서버 연결에 문제가 있는 것은 아니고, 테이블에 들어가는 실제 데이터를 찾을 수 없을 것 같습니다.
다음은 내 코드의 예입니다.
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD')
cursor = cnxn.cursor()
cursor.execute("SELECT * FROM sys.tables")
tables = cursor.fetchall()
#cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER")
for row in cursor.columns(table='WORK_ORDER'):
print row.column_name
for field in row:
print field
그러나 이 결과는 테이블 이름, 열 이름, 정수 및 '없음'과 같은 것을 제공합니다.
STATUS_EFF_DATE
DATABASE
dbo
WORK_ORDER
STATUS_EFF_DATE
93
datetime
23
16
3
None
0
None
None
9
3
None
80
NO
61
그래서 저는 제 테이블을 채울 수 있는 가치를 어디서 얻을 수 있는지 잘 모르겠습니다.테이블에 있어야 합니까='WORK_ORDER'입니다. 그러나 다른 테이블 이름으로 지정할 수 있습니까?제가 방금 누락한 데이터를 인쇄할 수 있는 방법이 있습니까?
어떤 조언이나 제안이라도 해주시면 감사하겠습니다.
당신은 정말 가깝습니다!
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD')
cursor = cnxn.cursor()
cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER")
for row in cursor.fetchall():
print row
("meta" 함수는 실제 데이터와 반대로 명명된 테이블의 열에 대한 메타데이터를 수집합니다.)
당신은 Panda를 사용하여 정보를 검색하고 데이터 프레임으로 얻을 수 있습니다.
import pyodbc as cnn
import pandas as pd
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=SQLSRV01;DATABASE=DATABASE;UID=USER;PWD=PASSWORD')
# Copy to Clipboard for paste in Excel sheet
def copia (argumento):
df=pd.DataFrame(argumento)
df.to_clipboard(index=False,header=True)
tableResult = pd.read_sql("SELECT * FROM YOURTABLE", cnxn)
# Copy to Clipboard
copia(tableResult)
# Or create a Excel file with the results
df=pd.DataFrame(tableResult)
df.to_excel("FileExample.xlsx",sheet_name='Results')
이것이 도움이 되길 바랍니다!건배!
테이블에 저장된 실제 데이터를 수신하려면 fetch...() 함수 중 하나를 사용하거나 커서를 반복기(예: "cursor의 행...")로 사용해야 합니다.이에 대한 설명은 설명서에 나와 있습니다.
cursor.execute("select user_id, user_name from users where user_id < 100")
rows = cursor.fetchall()
for row in rows:
print row.user_id, row.user_name
이렇게 하면 됩니다.
import pandas as pd
import pyodbc
cnxn = pyodbc.connect("Driver={SQL Server}\
;Server=SERVER_NAME\
;Database=DATABASE_NAME\
;Trusted_Connection=yes")
df = pd.read_sql("SELECT * FROM myTableName", cnxn)
df.head()
pyodbc 라이브러리를 사용하는 대신 pyodbc 라이브러리를 사용합니다...이것은 저에게 효과가 있었습니다.
import pypyodbc
conn = pypyodbc.connect("DRIVER={SQL Server};"
"SERVER=server;"
"DATABASE=database;"
"Trusted_Connection=yes;")
cursor = conn.cursor()
cursor.execute('SELECT * FROM [table]')
for row in cursor:
print('row = %r' % (row,))
import pyodbc
conn = pyodbc.connect('Driver={SQL Server};'
'Server=db-server;'
'Database=db;'
'Trusted_Connection=yes;')
sql = "SELECT * FROM [mytable] "
cursor.execute(sql)
for r in cursor:
print(r)
왜죠pyodbc
로 시도할 수 있습니다.pymssql
자세한 내용은 https://stackoverflow.com/a/70445445/8614314 링크를 참조하십시오.
import pandas as pd
import pymssql
con = pymssql.connect(<conncetion to the server and db>)
cursor = con.cursor()
query = "<Your query>"
cursor.execute(query)
df = pd.read_sql(query, con)
con.close()
업데이트된 답변은 저에게 적합하지 않습니다. 연결 선을 다음과 같이 편집하여 수정되었습니다(세미콜론을 혼수 상태로 바꾸고 해당 인용문도 제거).
import pyodbc
cnxn = pyodbc.connect(DRIVER='{SQL Server}',SERVER=SQLSRV01,DATABASE=DATABASE,UID=USER,PWD=PASSWORD)
cursor = cnxn.cursor()
cursor.execute("SELECT WORK_ORDER.TYPE,WORK_ORDER.STATUS, WORK_ORDER.BASE_ID, WORK_ORDER.LOT_ID FROM WORK_ORDER")
for row in cursor.fetchall():
print row
이 쿼리를 필요한 항목의 예로 사용할 수 있습니다. 전체 코드는 다음과 같습니다.
수입 pyodbc def sqlquery(문서): cnxn = pyodbc.connect(r'Driver=)SQL Server;Server=dc00sqlXX.production.somewhere.com \sql2014;데이터베이스=ABQtrx_202105;Trusted_Connection=예;)커서 = cnxn.java커서실행(실행)행 = 커서입니다.모두 가져가다행에 있는 행의 경우: print(행.javafeedid)cnxn.close » sqlquery([ABQtrx_202105.dbo.retsfeed'에서 'mlsfeedid 선택')
언급URL : https://stackoverflow.com/questions/11451101/retrieving-data-from-sql-using-pyodbc
'it-source' 카테고리의 다른 글
Google에서 Python을 많이 사용합니다. (0) | 2023.06.20 |
---|---|
Chrome에게 ts 대신 js를 디버그하도록 지시 (0) | 2023.06.20 |
C# 평행.각 풀에서 너무 많은 연결을 여는 경우 (0) | 2023.06.15 |
실패: 'DynamicTestModule' 모듈에서 예기치 않은 지시문 'ContactDetailsComponent'를 가져왔습니다.@NgModule 주석을 추가하십시오. (0) | 2023.06.15 |
Apache POI를 사용하여 Excel 파일에서 열을 가져오는 방법은 무엇입니까? (0) | 2023.06.15 |