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利用beautifulSoup实现爬虫
Sep 29 Python
Python中__name__的使用实例
Apr 14 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
python使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
opencv python 图像去噪的实现方法
Aug 31 Python
pycharm 安装JPype的教程
Aug 08 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
python实现银行账户系统
Feb 22 Python
Python3.10的一些新特性原理分析
Sep 15 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
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
vue实现商城秒杀倒计时功能
2019/12/12 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
[01:35:53]完美世界DOTA2联赛PWL S3 Magma vs GXR 第二场 12.13
2020/12/17 DOTA
Python中字典的基础知识归纳小结
2015/08/19 Python
Python Requests 基础入门
2016/04/07 Python
python3 logging日志封装实例
2020/04/08 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
预备党员思想汇报
2014/01/08 职场文书
总账会计岗位职责
2014/03/13 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
保证书范文大全
2014/04/28 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android