python连接PostgreSQL数据库的过程详解

 更新时间:2019年09月18日 14:17:17   作者:郭雪原  
这篇文章主要介绍了python连接PostgreSQL数据库的过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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 Thread虚假唤醒概念与防范详解

    Python Thread虚假唤醒概念与防范详解

    这篇文章主要介绍了Python Thread虚假唤醒概念与防范,虚假唤醒是一种现象,它只会出现在多线程环境中,指的是在多线程环境下,多个线程等待在同一个条件上,等到条件满足时,所有等待的线程都被唤醒,但由于多个线程执行的顺序不同
    2023-02-02
  • Python多进程入门、分布式进程数据共享实例详解

    Python多进程入门、分布式进程数据共享实例详解

    这篇文章主要介绍了Python多进程入门、分布式进程数据共享,结合实例形式详细分析了Python进程操作技巧数据共享相关实现技巧与注意事项,需要的朋友可以参考下
    2019-06-06
  • python 遍历目录(包括子目录)下所有文件的实例

    python 遍历目录(包括子目录)下所有文件的实例

    今天小编就为大家分享一篇python 遍历目录(包括子目录)下所有文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 利用Python绘制多种风玫瑰图

    利用Python绘制多种风玫瑰图

    这篇文章主要介绍了利用Python绘制多种风玫瑰图,风玫瑰是由气象学家用于给出如何风速和风向在特定位置通常分布的简明视图的图形工具,下文绘制实现详情,需要的小伙伴可以参考一下
    2022-05-05
  • python工具dtreeviz决策树可视化和模型可解释性

    python工具dtreeviz决策树可视化和模型可解释性

    这篇文章主要介绍了python工具dtreeviz决策树可视化和模型可解释性,决策树是梯度提升机和随机森林的基本构建块,在学习这些模型的工作原理和模型可解释性时,可视化决策树是一个非常有帮助,下文相关资料,需要的小伙伴可任意参考一下
    2022-03-03
  • Python sys模块常用方法解析

    Python sys模块常用方法解析

    这篇文章主要介绍了Python sys模块常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题

    解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题

    今天小编就为大家分享一篇解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • django自带serializers序列化返回指定字段的方法

    django自带serializers序列化返回指定字段的方法

    今天小编就为大家分享一篇django自带serializers序列化返回指定字段的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • django中websocket的具体使用

    django中websocket的具体使用

    本文主要介绍了django中websocket的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 深入理解Python中的 __new__ 和 __init__及区别介绍

    深入理解Python中的 __new__ 和 __init__及区别介绍

    这篇文章主要介绍了深入理解Python中的 __new__ 和 __init__及区别介绍,这两个方法的主要区别在于:__new__ 负责对象的创建而 __init__ 负责对象的初始化。具体内容详情大家跟随小编一起看看吧
    2018-09-09

最新评论