pymssql หรือ pyodbc

วันนี้มีปัญหาโลกแตก ต่อ 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)



เรื่องวุ้นๆของวัยรุ่น OpenSSL

เพื่อแก้ bug ปัญหาบน Debian


รายละเอียดขั้นตอนสำหรับการอัพเดท OpenSSL บน Debian:

  • ดาวน์โหลด OpenSSL จากเว็บไซต์:
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz -O openssl-1.1.1p.tar.gz 
  • แตกไฟล์ tar.gz:
tar -zxvf openssl-1.1.1p.tar.gz 
  • เข้าไปใน directory ที่มีไฟล์ที่แตกออกมา:
cd openssl-1.1.1p 
  • กำหนดค่าการติดตั้งด้วยคำสั่ง ./config
  • สร้างและติดตั้ง OpenSSL ด้วยคำสั่ง make และ sudo make install:
  • รัน sudo ldconfig เพื่ออัปเดต dynamic linker run-time bindings
  • ตรวจสอบเวอร์ชั่นของ OpenSSL ที่ติดตั้งด้วยคำสั่ง openssl version

และในกรณีที่รัน 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

0
239