版權聲明:轉載請註明作者(獨孤尚良dugushangliang)出處:https://blog.csdn.net/dugushangliang/article/details/103926536
Python通過cx_Oracle來讀寫Oracle數據庫,通過psycopg2來讀寫PostgreSQL數據庫。
執行SQL語句如下:
#以下爲兩者的不同代碼,是導入模塊並連接數據庫的操作
import cx_Oracle
conn = cx_Oracle.connect('用戶名/密碼@數據庫')
import psycopg2
conn = psycopg2.connect(database='數據庫',user='用戶名',password='密碼')
#以下爲SQL查詢的共同代碼
sql="SELECT * FROM FILM ORDER BY PASS;"
cursor = conn.cursor()
cursor.execute(sql)
lis = cursor.fetchall()
for j in lis:
print(j)
cursor.close()
#以下爲執行SQL增刪改的共同代碼
sql="DELETE FROM FILM WHERE NAME = '獨孤尚良dugushangliang';"
cursor.execute(sql)
conn.commit()
cursor.close()
#以下爲斷開數據庫連接的共同代碼
conn.close()
但還有些需要注意的事項:
SQL語句中,如果是Oracle執行,可以不帶分號,但PostgreSQL必須含有分號。如下面這樣,PostgreSQL不會刪除而Oracle會刪除。
DELETE FROM FILM WHERE NAME = '名稱'
Oracle和PostgreSQL對於空字符串的處理有所不同,如下所示,Oracle會把空字符串''處理成Null,而PostgreSQL則不會。如果執行了下面第一行的SQL語句,Oracle會自動處理成第二行SQL語句,而PostgreSQL則不會。
INSERT INTO FILM(NAME,WEB,PASS,TYPE) VALUES('獨孤尚良dugushangliang', '', '', 'Y');
INSERT INTO FILM(NAME,WEB,PASS,TYPE) VALUES('獨孤尚良dugushangliang', Null, Null, 'Y');
在同樣數據的情況下,執行第二句,Oracle和PostgreSQL的表現得到的結果都一樣,而執行第一句則有所不同。下面是兩個數據庫在同樣數據的情況下(即pass只有兩個值,一個是空值一個是過),同時執行第一句得到的結果。
所以,相比較來說,Oracle更靈活一些,PostgreSQL更嚴謹一些。
獨孤尚良dugushangliang——著