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采集腾讯新闻实例
Jul 10 Python
Python读取sqlite数据库文件的方法分析
Aug 07 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
Oct 18 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
线程安全及Python中的GIL原理分析
Oct 29 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
Vue el-autocomplete远程搜索下拉框并实现自动填充功能(推荐)
2019/10/25 Javascript
python操作xml文件示例
2014/04/07 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
Python各种扩展名区别点整理
2020/02/27 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
Python新手学习装饰器
2020/06/04 Python
英国女性时尚品牌:Apricot
2018/12/04 全球购物
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
培训主管岗位职责
2014/02/01 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
驾驶员培训方案
2014/05/01 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
redis数据一致性的实现示例
2022/03/18 Redis