python通过cx_Oracle/psycopg2分别读写Oracle/PostgreSQL数据库的异同

版权声明:转载请注明作者(独孤尚良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——著

发布了143 篇原创文章 · 获赞 57 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章