python连接PostgreSQL数据库的过程详解


Posted in Python onSeptember 18, 2019

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入理解Python中字典的键的使用
Aug 19 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
python决策树之C4.5算法详解
Dec 20 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
Atom的python插件和常用插件说明
Jul 08 Python
python模糊图片过滤的方法
Dec 14 Python
python输入错误后删除的方法
Oct 12 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
Python数据分析入门之数据读取与存储
May 13 Python
Python传递参数的多种方式(小结)
Sep 18 #Python
余弦相似性计算及python代码实现过程解析
Sep 18 #Python
python之yield和Generator深入解析
Sep 18 #Python
PyTorch预训练的实现
Sep 18 #Python
用python实现英文字母和相应序数转换的方法
Sep 18 #Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 #Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 #Python
You might like
杏林同学录(八)
2006/10/09 PHP
PHP与SQL注入攻击[三]
2007/04/17 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
Python实现扣除个人税后的工资计算器示例
2018/03/26 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
浅谈Python __init__.py的作用
2020/10/28 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
周鸿祎:教你写创业计划书
2013/12/30 职场文书
2015年实习单位评语
2015/03/25 职场文书
请假条应该怎么写?
2019/06/24 职场文书
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
详解PyTorch模型保存与加载
2022/04/28 Python
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL