1. 程式人生 > 資料庫 >python連線PostgreSQL過程解析

python連線PostgreSQL過程解析

這篇文章主要介紹了python連線PostgreSQL過程解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1. 常用模組

# 連線資料庫

connect()函式建立一個新的資料庫連線對話並返回一個新的連線例項物件

PG_CONF_123 = {
  'user':'emma','port':123,'host':'192.168.1.123','password':'emma','database':'dbname'}
conn = psycopg2.connect(**PG_CONF_123)

# 開啟一個操作整個資料庫的游標

連線物件可以建立游標用來執行SQL語句

cur = conn.cursor()

# 執行一個建立表的SQL語句

游標可以使用execute()和executemany()函式

cur.execute("CREATE TABLE test (id serial PRIMARY KEY,num integer,data varchar);")

# 傳遞引數給插入語句

cur.execute("INSERT INTO test (num,data) VALUES (%s,%s)",(100,"abc'def"))

# 執行查詢語句並將獲取到的資料作為python物件

cur.execute("SELECT * FROM test;")
cur.fetchone()
(1,100,"abc'def")

# 提交修改

如果只使用查詢語句不用commit方法,insert/update/delete等操作需要呼叫commit()。rollback()函式用於會滾到上次呼叫commit()方法之後。

conn.commit()

# 關閉資料庫連線

cur.close()
conn.close()

2. 防範SQL注入漏洞

典型的SQL注入漏洞形式:

SQL = "select * from userinfo where id = '%s'" % (id)

SQL = "select * from userinfo where id = '{}'".format(id)

如果有人惡意攻擊,在傳入引數的程式碼中加入惡意程式碼,如:

request.id = '123; drop tabel userid;'

會造成嚴重風險,為防止此問題,應該通過第二位變數傳入引數的方法:%s(無論變數是什麼資料型別,都使用%s)

SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes
data = ("O'Reilly",)
cur.execute(SQL,data) # Note: no % operator

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。