วันนี้มีปัญหาโลกแตก ต่อ ODBC ไปหา SQL 15 จาก Debian 11 ไม่ได้ เลยมีตัวเลือกอยู่ว่า pymssql หรือ pyodbc สรุปไป pymssql ใช้ FreeTDS ซึ่งเป็นส่วนของโปรแกรมเปิดที่รับรองสแปค TDS (Tabular Data Stream) ของ Microsoft, ทำให้สามารถสื่อสารกับ Microsoft SQL Server และ Sybase databases ได้. สำหรับงานที่ไม่จำเป็นต้องใช้คุณสมบัติพิเศษที่มีอยู่ใน driver ODBC ของ Microsoft, pymssql อาจจะเป็นทางเลือกที่ดี
แต่โปรดทราบว่า pymssql ไม่ได้รับการสนับสนุนอย่างเป็นทางการและไม่ได้รับการอัปเดตอย่างสม่ำเสมอ. ถ้าคุณต้องการฟีเจอร์ที่มีการสนับสนุนเต็มรูปแบบ และข้อความข้อผิดพลาดที่ชัดเจนมากขึ้นเมื่อมีปัญหา, คุณอาจต้องการพิจารณาใช้ driver ODBC ของ Microsoft หรือ pyodbc (ซึ่งต้องการ ODBC driver) อีกครั้งในอนาคต
ลองทดสอบ pymssql ด้วย python
import pymssql try: conn = pymssql.connect(server='1.1.1.1', user='sa', password='', database='') cursor = conn.cursor() cursor.execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'") for row in cursor: print("Table name:", row[0]) conn.close() except Exception as e: print("Failed to connect to database:", e)
ลองทดสอบ pyodbc ด้วย python
import pyodbc import platform # Check the Python version print(f"Python version: {platform.python_version()}") # Check the ODBC driver version def check_odbc_version(): drivers = [driver for driver in pyodbc.drivers() if driver.startswith('ODBC Driver')] driver_versions = sorted(drivers, reverse=True) if not driver_versions: print("No suitable ODBC driver found.") return None else: driver_version = driver_versions[0] driver_minor_version = [driver for driver in pyodbc.drivers() if driver.startswith(driver_version)] if driver_minor_version: driver_version = sorted(driver_minor_version, reverse=True)[0] print(f"ODBC Driver version: {driver_version}") return driver_version ####################### server = '1.1.1.1' database = '' username = 'sa' password = '' ####################### # Get the ODBC driver version driver = check_odbc_version() if driver is None: print("Please install an ODBC driver and try again.") else: driver = '{' + driver + '}' try: connection_string = f'DRIVER={driver};SERVER={server};DATABASE={database};UID={username};PWD={password}' connection = pyodbc.connect(connection_string) cursor = connection.cursor() # Execute a simple query to test the connection cursor.execute('SELECT @@VERSION') row = cursor.fetchone() while row: print(row[0]) row = cursor.fetchone() except pyodbc.Error as ex: sqlstate = ex.args[1] print(sqlstate)
เพื่อแก้ bug ปัญหาบน Debian
รายละเอียดขั้นตอนสำหรับการอัพเดท OpenSSL บน Debian:
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz -O openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p
และในกรณีที่รัน openssl version แล้วเกิดข้อผิดพลาด "error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory", คุณอาจจำเป็นต้องคัดลอกไฟล์ libcrypto.so.3, libssl.so.3 และ libssl.so ไปยัง /usr/lib ด้วยคำสั่ง cp และรัน sudo ldconfig อีกครั้ง.
คำเตือน: การอัปเดต OpenSSL อาจมีผลกระทบต่อการทำงานของโปรแกรมที่อาศัย OpenSSL ทั้งหมดบนเครื่องของคุณ
ถ้ายังเจอเวอร์ชั่น ทำงามค่อมกันอยู่
sudo rm /usr/bin/openssl sudo ln -s /usr/local/bin/openssl /usr/bin/openssl
คำสั่งที่แรกจะลบ symlink หรือไฟล์ที่อยู่ใน /usr/bin/openssl, และคำสั่งที่สองจะสร้าง symlink ใหม่จาก /usr/local/bin/openssl ไปยัง /usr/bin/openssl หลังจากที่คุณได้สร้าง symlink ใหม่แล้ว, คุณควรจะสามารถตรวจสอบเวอร์ชัน openssl ได้:
openssl version
root@ncspoctest:/home/conv/openssl-1.1.1p# openssl version
OpenSSL 1.1.1p 21 Jun 2022