Skip to content
Gallery
บันทึกการทำ
Share
Explore
Systems

icon picker
ODBC บน Linux และ pyodbc

จะทำอย่างไร เมื่อต้องมาพัฒนา software ด้วย Python บน Linux ให้เชื่อมต่อกับ SQL Server
Last edited 214 days ago by System Writer
ปกติจะใช้ Opensource เป็นหลักในการเขียนโปรแกรมต่างๆ แต่เมื่อลูกค้าใช้ฐานข้อมูลเป็น SQL Server ของ Microsoft ก็ต้องค้นหาศึกษาข้อมูลหาหนทาง จากความรู้พื้นฐานในอดีตที่ทำ support ก็พอจะรู้ keyword อยู่บ้าง ODBC

สภาพแวดล้อม

Debian 11
MSSQL 11.x
Python 3.x
ODBC Driver 17

เริ่มต้นติดตั้ง

บน Debian server ทำการติดตั้ง unixodbc และ odbcinst
apt install unixodbc odbcinst
ทำการ download ODBC Driver version ที่ต้องการ จาก Microsoft <> จะได้ deb มา ทำการติดตั้ง
dpkg -i msodbcsql17_17.10.2.1-1_amd64.deb
แก้ไขตั้งค่าชื่อ driver ตามต้องการ ในไฟล์ /etc/odbcinst.ini
[MSSQL17]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.2.1
UsageCount=1

[MSSQL18]
Description=Microsoft ODBC Driver 18 for SQL Server
Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1
UsageCount=1
ติดตั้ง pyodbc
pip install pyodbc
เนื่องด้วย MSSQL Server ที่ใช้ version ค่อนข้างเก่า จึงไม่รองรับ SSL version ใหม่ๆ จึงต้องทำ config ปรับลด version ของ SSL ลง โดยสร้างไฟล์ชื่อ .openssl_allow.cnf
openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT@SECLEVEL=0
เปิด python ด้วยคำสั่งนี้
OPENSSL_CONF=.openssl_allow.cnf python
ตัวอย่าง python
import pyodbc

# Specifying the ODBC driver, server name, database, etc. directly
cnxn = pyodbc.connect('DRIVER={MSSQL17};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')

# Create a cursor from the connection
cursor = cnxn.cursor()

cursor.execute("select user_id, user_name from users")
rows = cursor.fetchall()
for row in rows:
print(row.user_id, row.user_name)

cursor.execute("insert into products(id, name) values ('pyodbc', 'awesome library')")
cnxn.commit()

แหล่งอ้างอิง

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.