it-source

pyodbc를 사용하여 SQL에서 데이터 검색

criticalcode 2023. 6. 20. 21:39
반응형

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

반응형