python連接PostgreSQL數(shù)據(jù)庫的過程詳解
1. 常用模塊
# 連接數(shù)據(jù)庫
connect()函數(shù)創(chuàng)建一個新的數(shù)據(jù)庫連接對話并返回一個新的連接實例對象
PG_CONF_123 = { 'user':'emma', 'port':123, 'host':'192.168.1.123', 'password':'emma', 'database':'dbname'} conn = psycopg2.connect(**PG_CONF_123)
# 打開一個操作整個數(shù)據(jù)庫的光標
連接對象可以創(chuàng)建光標用來執(zhí)行SQL語句
cur = conn.cursor()
# 執(zhí)行一個創(chuàng)建表的SQL語句
光標可以使用execute()和executemany()函數(shù)
cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
# 傳遞參數(shù)給插入語句
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",(100, "abc'def"))
# 執(zhí)行查詢語句并將獲取到的數(shù)據(jù)作為python對象
cur.execute("SELECT * FROM test;") cur.fetchone() (1, 100, "abc'def")
# 提交修改
如果只使用查詢語句不用commit方法,insert/update/delete等操作需要調(diào)用commit()。rollback()函數(shù)用于會滾到上次調(diào)用commit()方法之后。
conn.commit()
# 關(guān)閉數(shù)據(jù)庫連接
cur.close() conn.close()
2. 防范SQL注入漏洞
典型的SQL注入漏洞形式:
SQL = "select * from userinfo where id = '%s'" % (id) SQL = "select * from userinfo where id = '{}'".format(id)
如果有人惡意攻擊,在傳入?yún)?shù)的代碼中加入惡意代碼,如:
request.id = '123; drop tabel userid;'
會造成嚴重風(fēng)險,為防止此問題,應(yīng)該通過第二位變量傳入?yún)?shù)的方法:%s(無論變量是什么數(shù)據(jù)類型,都使用%s)
SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes data = ("O'Reilly", ) cur.execute(SQL, data) # Note: no % operator
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Numpy中矩陣matrix讀取一列的方法及數(shù)組和矩陣的相互轉(zhuǎn)換實例
今天小編就為大家分享一篇Numpy中矩陣matrix讀取一列的方法及數(shù)組和矩陣的相互轉(zhuǎn)換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python實現(xiàn)合并同一個文件夾下所有PDF文件的方法示例
這篇文章主要介紹了Python實現(xiàn)合并同一個文件夾下所有PDF文件的方法,涉及Python針對pdf文件的讀取、判斷、解密、寫入合并等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04Python Tornado實現(xiàn)WEB服務(wù)器Socket服務(wù)器共存并實現(xiàn)交互的方法
這篇文章主要介紹了Python Tornado實現(xiàn)WEB服務(wù)器Socket服務(wù)器共存并實現(xiàn)交互的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05python中redis查看剩余過期時間及用正則通配符批量刪除key的方法
這篇文章主要介紹了python中redis查看剩余過期時間及用正則通配符批量刪除key的方法,需要的朋友可以參考下2018-07-07