python連線PostgreSQL過程解析
阿新 • • 發佈:2020-02-15
這篇文章主要介紹了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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。