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

yipeiwu_com7年前Python基础

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实现桶排序与快速排序算法结合应用示例

Python实现桶排序与快速排序算法结合应用示例

本文实例讲述了Python实现桶排序与快速排序算法结合应用的方法。分享给大家供大家参考,具体如下: #-*- coding: UTF-8 -*- import numpy as np...

Python异步操作MySQL示例【使用aiomysql】

本文实例讲述了Python异步操作MySQL。分享给大家供大家参考,具体如下: 安装aiomysql 依赖 Python3.4+ asyncio PyMySQL 安装...

解决nohup执行python程序log文件写入不及时的问题

问题 今天用nohup后台执行python程序,并将标准输出和错误输出重定向到一个log文件,但发现log文件隔好久才会更新,很煎熬。。。然而正常屏幕输出时候非常及时。 不确定程序是不是...

Python之inspect模块实现获取加载模块路径的方法

该文主要介绍如何获取模块的路径,需要申明的是这里所说的模块可以是功能实现的该模块,也可以是别的模块。 使用到的是 inspect 模块的 .getsourcefile(需要获取的模块名)...

Python中输出ASCII大文字、艺术字、字符字小技巧

Python中输出ASCII大文字、艺术字、字符字小技巧

复制代码 代码如下: display text in large ASCII art fonts 显示大ASCII艺术字体 这种东西在源码声明或者软件初始化控制台打印时候很有用。...