经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » PostgreSQL » 查看文章
python连接PostgreSQL数据库的过程详解
来源:jb51  时间:2019/9/19 8:56:11  对本文有异议

1. 常用模块

# 连接数据库

connect()函数创建一个新的数据库连接对话并返回一个新的连接实例对象

  1. PG_CONF_123 = {
  2. 'user':'emma',
  3. 'port':123,
  4. 'host':'192.168.1.123',
  5. 'password':'emma',
  6. 'database':'dbname'}
  7. conn = psycopg2.connect(**PG_CONF_123)

# 打开一个操作整个数据库的光标

连接对象可以创建光标用来执行SQL语句

  1. cur = conn.cursor()

# 执行一个创建表的SQL语句

光标可以使用execute()和executemany()函数

  1. cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")

# 传递参数给插入语句

  1. cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",(100, "abc'def"))

# 执行查询语句并将获取到的数据作为python对象

  1. cur.execute("SELECT * FROM test;")
  2. cur.fetchone()
  3. (1, 100, "abc'def")

# 提交修改

如果只使用查询语句不用commit方法,insert/update/delete等操作需要调用commit()。rollback()函数用于会滚到上次调用commit()方法之后。

  1. conn.commit()

# 关闭数据库连接

  1. cur.close()
  2. conn.close()

2. 防范SQL注入漏洞

典型的SQL注入漏洞形式:

  1. SQL = "select * from userinfo where id = '%s'" % (id)
  2. SQL = "select * from userinfo where id = '{}'".format(id)

如果有人恶意攻击,在传入参数的代码中加入恶意代码,如:

request.id = '123; drop tabel userid;'

会造成严重风险,为防止此问题,应该通过第二位变量传入参数的方法:%s(无论变量是什么数据类型,都使用%s)

  1. SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes
  2. data = ("O'Reilly", )
  3. cur.execute(SQL, data) # Note: no % operator

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号