ga('set', 'anonymizeIp', 1);
Categories: CodingPython

[python] pyodbc with MSSQL/postgreSQL

Share

利用pyodbc使用python操作資料庫,本文介紹pyodbc連結MSSQL/postgreSQL之方法。

PYODBC

新版python只需install pyodbc並在程式碼中import即可。
pip install pyodbc

import pyodbc

而舊版python (EX:3.4)則需install pypyodbc並import。
pip install pypyodbc

import pypyodbc as pyodbc

連結資料庫

pyodbc連結資料庫時,無論是MSSQL或是PostgreSQL,都須先檢查DB Driver。

MSSQL

以MSSQL Server 2008為例,安裝好DB後透過以下pyodbc內置指令即可印出目前支援的drivers:

import pypyodbc as pyodbc
for i in pyodbc.drivers:
    print(i)

Results:
SQL Server
…(其他Drivers)

接著找到支援的MSSQL ODBC driver後,就能由以下程式操作DB:


import pypyodbc as pyodbc

cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER={127.0.0.1}; DATABASE={TEST_DB}; UIS={USER}; PWD={password};')
cursor = cnxn.cursor()
cursor.execute("INSERT into MY_TABLE(COL01, COL02, COL03) VALUES(1, 2, 3)")
cnxn.commit()

PostgreSQL

需先至下方連結下載並安裝PostgreSQL之ODBC,
Windows請到網頁的msi資料夾下載安裝檔。
https://www.postgresql.org/ftp/odbc/versions/

安裝後使用上面pyodbc尋找driver,
Results:
SQL Server
PostgreSQL ANSI
PostgreSQL Unicode
PostgreSQL Unicode
…(其他Drivers)

並修改程式碼:


import pypyodbc as pyodbc

MY_TABLE = '"MY_TABLE"'
COL01 = '"COL01"'
COL02 = '"COL02"'
COL03 = '"COL03"'

cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER={127.0.0.1}; DATABASE={TEST_DB}; UIS={USER}; PWD={password};')
cursor = cnxn.cursor()
cursor.execute("INSERT into" + MY_TABLE + "(" + COL01 + "," +  COL02 + "," + COL03 + ") VALUES(1, 2, 3)")
cnxn.commit()

上方為什麼要加入


MY_TABLE = '"MY_TABLE"'
COL01 = '"COL01"'
COL02 = '"COL02"'
COL03 = '"COL03"'

這四行程式呢?

因為PostgreSQL在擷取ODBC指令時,在"Unquoted Names" 是不區分大小寫(Case-insensitive)的,所以SELECT * FROM hello 會和 SELECT * FROM HELLO結果會是相同(都視為hello)。

所以我們必須將指令中的Name改為"Quoted",所以SELECT * FROM "hello" 會和 SELECT * FROM "HELLO"結果就會不同。

基於以上因素,若你的資料庫名稱,或是資料表名稱是大寫,或是有區分大小寫,那就必須特別注意資料庫操作段程式碼的撰寫邏輯。

Jys

Published by
Jys

Recent Posts

[python] Flask Create RESTful API

This article gi... Read More

3 年 前發表

[Javascript] 新增/刪除JSON中key值

在web訊息交換常會需要對JS... Read More

3 年 前發表

[JAVA] SQL Server Connection

本文介紹JAVA連線SQL s... Read More

3 年 前發表