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查询sqlite数据表的方法
May 08 Python
python引用DLL文件的方法
May 11 Python
python查看zip包中文件及大小的方法
Jul 09 Python
Python通过future处理并发问题
Oct 17 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
django使用LDAP验证的方法示例
Dec 10 Python
Python字典的核心底层原理讲解
Jan 24 Python
pandas 数据结构之Series的使用方法
Jun 21 Python
python图形用户接口实例详解
Dec 16 Python
Python 实现一个简单的web服务器
Jan 03 Python
用Python可视化新冠疫情数据
Jan 18 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
PHP json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
JavaScipt选取文档元素的方法(推荐)
2016/08/05 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
Python 多进程和数据传递的理解
2017/10/09 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
Python检测数据类型的方法总结
2019/05/20 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
python 装饰器功能与用法案例详解
2020/03/06 Python
python小白学习包管理器pip安装
2020/06/09 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
汉语专业应届生求职信
2013/10/01 职场文书
个人作风剖析材料
2014/02/02 职场文书
初中班主任评语
2014/04/24 职场文书
法定代表人资格证明书
2014/09/11 职场文书
邹越演讲观后感
2015/06/15 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
Go Plugins插件的实现方式
2021/08/07 Golang