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 相关文章推荐
Django与遗留的数据库整合的方法指南
Jul 24 Python
python动态加载包的方法小结
Apr 18 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
Python判断有效的数独算法示例
Feb 23 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
Django3中的自定义用户模型实例详解
Aug 23 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
python中pickle模块浅析
Dec 29 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
第三节 定义一个类 [3]
2006/10/09 PHP
虚拟主机中对PHP的特殊设置
2006/10/09 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
低版本中Python除法运算小技巧
2015/04/05 Python
python实现一次创建多级目录的方法
2015/05/15 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
python实现从wind导入数据
2019/12/03 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
什么是python的必选参数
2020/06/21 Python
2014年中班元旦活动方案
2014/02/14 职场文书
英语教学随笔感言
2014/02/20 职场文书
老人节标语大全
2014/10/08 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python