ฉันมีสคริปต์ python ที่ฉันสร้างและพัฒนา .exe ด้วย Pyinstaller ที่ใช้ไลบรารี pyodbc
ของ python เพื่อสืบค้นและดูเหมือนโค้ดปลอมด้านล่าง มันทำงานบนคอมพิวเตอร์ของฉันได้อย่างสมบูรณ์แบบ ฉันพยายามแบ่งปัน .exe ของฉันกับเพื่อนร่วมงานสองสามคน ซึ่งฉันได้ตรวจสอบแล้วอีกครั้งว่าสามารถเข้าถึงฐานข้อมูลของเราภายใน Excel หลังจากที่ให้ข้อมูลการเข้าสู่ระบบแก่พวกเขาแล้ว อย่างไรก็ตาม พวกเขาไม่สามารถเข้าถึงฐานข้อมูลของเราจากภายใน python .exe ของฉันได้
หลังจากการทดสอบครั้งหนึ่ง ฉันรู้ว่าพวกเขาไม่สามารถเข้าถึงได้ เนื่องจาก .exe ที่ฉันสร้างขึ้นมีข้อผิดพลาด (No suitable driver found. Cannot connect.)
ดังที่คุณเห็นในโค้ดด้านล่าง เนื่องจากไม่พบ ODBC Driver 17 for SQL Server
ในคอมพิวเตอร์ของเพื่อนร่วมงาน ฉันเชื่อว่า Excel ใช้ PowerQuery ดังนั้นจึงไม่ต้องพึ่งพาไดรเวอร์ ODBC แต่ python จะต้องใช้ไดรเวอร์ คำถามของฉันคือ - ควรติดตั้ง ODBC Driver 17 for SQL Server
จากลิงก์นี้หรือไม่ https://www.microsoft.com/en-us/download/details.aspx?id=56567
ผู้ใช้ไม่มีสิทธิ์ของผู้ดูแลระบบในการดาวน์โหลดไดรเวอร์ (และฉันไม่สามารถทดสอบด้วยตนเองบนคอมพิวเตอร์เครื่องอื่นได้) และฉันมีเวลาและการเข้าถึงทรัพยากรไอทีที่จำกัด ไม่เช่นนั้น ฉันจะแก้ไขปัญหากับผู้ใช้ด้วยตัวเอง ดังนั้นฉันจึงอยากทราบว่ามีใครมีประสบการณ์เกี่ยวกับเรื่องนี้หรือพบโพสต์/เอกสารที่คล้ายกันซึ่งอาจเป็นประโยชน์กับฉันหรือไม่ ขอย้ำอีกครั้งว่าโค้ดอยู่ด้านล่างเพื่อใช้อ้างอิง แต่ฉันไม่ต้องการความช่วยเหลือในเรื่องนั้น ฉันต้องอธิบายให้ฝ่ายไอทีทราบว่าฉันต้องการให้พวกเขาทำอะไรเพื่อผู้ใช้ ซึ่งเป็นเหตุผลว่าทำไมฉันถึงสงสัยว่า Microsoft® ODBC Driver 17 for SQL Server® - Windows
จะเพียงพอหรือไม่
import pandas as pd
import pyodbc
#Connection and credentials
driver_name = ''
driver_names = [x for x in pyodbc.drivers() if x.endswith(' for SQL Server')]
driver_names
if driver_names:
driver_name = driver_names[-1]
if driver_name:
conn_str = f'''DRIVER={driver_name};SERVER='''
else:
print('(No suitable driver found. Cannot connect.)')
server = '111.111.11.111'
database = 'database'
username = 'username'
password = 'password'
cnxn = pyodbc.connect(conn_str+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
try:
account_id_input = input("Select Account ID: ").strip()
print("Confirming Account ID...")
#SQL Query
df = pd.read_sql_query("""
Select [Account ID], [Year-Month], [Revenue] from database.dbo.tblaccount
""",
cnxn, params=[account_id_input]
)
print("CONFIRMED")
else: print("Incorrect ID or database connection error")
df.to_csv(f'{account_id_input}_data.csv', index=False)