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中的认证与登录
Oct 31 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
python requests 测试代理ip是否生效
Jul 25 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
django框架forms组件用法实例详解
Dec 10 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
Python如何给函数库增加日志功能
Aug 04 Python
详解Python 函数参数的拆解
Sep 02 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 Python
python基础学习之递归函数知识总结
May 26 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跨域cookie共享使用方法
2014/02/20 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
PHP实现的简单缓存类
2015/07/29 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python中为什么要用self探讨
2015/04/14 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Python中str.join()简单用法示例
2018/03/20 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
mysql的最长数据库名,表名,字段名可以是多长
2014/04/21 面试题
毕业生个人求职信范文分享
2014/01/05 职场文书
违反课堂纪律检讨书
2014/01/19 职场文书
十八届三中全会感言
2014/03/10 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
PO模式在selenium自动化测试框架的优势
2022/03/20 Python