Python 连接 PostgreSQL 数据库

这篇具有很好参考价值的文章主要介绍了Python 连接 PostgreSQL 数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Psycopg 是最受欢迎的用于连接 PostgreSQL 的 Python 驱动库, Psycopg 完全遵守 Python DB API 2.0 规范, 并且是线程安全的, 在底层直接调用 C 库 libpq

Python 连接 PostgreSQL 数据库

安装
$ pip install psycopg2-binary

psycopg2-binary 是预编译的包, 自带 libpq 和 libssl 库

psycopg2 的命名来源于 http://psyco.sourceforge.net/, 末尾的 pg 表示 PostgreSQL

简单示例
import psycopg2 as pg

# 连接 PostgreSQL
conn = pg.connect(
    host='127.0.0.1', port=5432, dbname='gorm', user='jianghuixin',
    password='123456'
)
cursor = conn.cursor()

# 执行 SQL 查询语句
cursor.execute("SELECT * FROM user_infos")

# 获取 SQL 查询结果
records = cursor.fetchall()
print(records)

# 关闭连接
cursor.close()
conn.close()
使用

connect() 函数创建一个数据库的 session, 并返回一个 connection 实例

  1. connection 实例支持:
  • 使用 cursor() 方法创建 cursor 实例
  • 事务操作例如 commit() 或 rollback() 方法
  1. cursor 实例支持:
  • 通过 execute() 与 executemany() 方法执行 SQL 语句
  • 遍历 cursor 获取 SQL 查询的数据, 或者调用 fetchone(), fetchmany(), fetchall() 方法

connection 和 cursor 均支持 with 语句

import psycopg2 as pg

dsn = "host=127.0.0.1 port=5432 dbname=gorm user=jianghuixin password=123456"
with pg.connect(dsn) as conn:
    with conn.cursor() as cursor:
        # 清理 demo 表
        cursor.execute("DROP TABLE IF EXISTS demo")
        # 创建 demo 表
        cursor.execute(
            "CREATE TABLE demo (id serial PRIMARY KEY, name VARCHAR(10), age INT)"
        )
        # 插入记录
        cursor.executemany(
            "INSERT INTO demo(name, age) VALUES(%s, %s)",
            [('David', 15), ('Alice', 25)]
        )
        # 提交事务
        conn.commit()

        cursor.execute("SELECT * FROM demo")
        records = cursor.fetchall()
        print(records)
SQL 传参

在 execute() 和 executemany() 方法中, 第一个参数为 SQL 语句, 可以包含多个 %s 占位符, 第二个参数为元组或列表, 给 SQL 语句中的 %s 依次传递数据

>>> cursor.execute("""
...     INSERT INTO some_table (an_int, a_date, a_string)
...     VALUES (%s, %s, %s);
...     """,
...     (10, datetime.date(2005, 11, 18), "O'Reilly"))

对应的 SQL 语句为:

INSERT INTO some_table (an_int, a_date, a_string)
VALUES (10, '2005-11-18'::date, 'O''Reilly');

可以通过 cursor.mogrify() 方法查看 %s 占位符被替换以后完整的 SQL 语句

>>> cursor.mogrify("""
...:     INSERT INTO some_table (an_int, a_date, a_string)
...:     VALUES (%s, %s, %s);
...:     """,
...:     (0, datetime.date(2005, 11, 18), "O'Reilly"))
b"\n    INSERT INTO some_table (an_int, a_date, a_string)\n    VALUES (0, '2005-11-18'::date, 'O''Reilly');\n    "

注意占位符只能使用 %s, 即使待传递的数据是整数, 也不能使用 %d


execute() 方法的第二个参数也可以是字典, 占位符需要改为 %(name)s, name 为字典的键

d = {'language': 'C++', 'year': 35}
cursor.execute(
    "INSERT INTO demo(name, age) VALUES(%(language)s, %(year)s)", d)

在 SQL 语句中, 如果要传递表名或字段名, 不能使用 %s 占位符机制, 因为 %s 会给字符串加上单引号, 单引号在 PostgreSQL 中仅用于标识实际的值, 不能标识表名或字段名

FIELD = 'name'

cursor.execute("SELECT %s FROM demo", (FIELD,)) # 错误

cursor.execute("SELECT %s FROM demo" % FIELD) # 正确(使用 % 运算符)
cursor.execute(f"SELECT {FIELD} FROM demo")   # 正确(使用 f-string)

以下展示了具体的替换结果:文章来源地址https://www.toymoban.com/news/detail-459376.html

In [5]: cursor.mogrify("SELECT %s FROM demo", (FIELD,))
Out[5]: b"SELECT 'name' FROM demo"

In [6]: cursor.mogrify(f"SELECT {FIELD} FROM demo")
Out[6]: b'SELECT name FROM demo'

到了这里,关于Python 连接 PostgreSQL 数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Navicat 连接远程数据库 Postgresql、MySQL

    不管什么数据库,只要用Navicat连接远程,下面的方法均奏效。 环境: 服务器:远程服务器 操作系统: : linux 数据库:PostgreSQL14 数据库客户端:Navicat 主要分为两步: 第一步:点击Navicat左上角的“连接”,选择Postgresql。先连接SSH服务器。  勾选“使用SSH通道”,在下面输

    2024年02月05日
    浏览(67)
  • 【PostgreSQL】连接pg数据库Schema切换

    由于PostgreSQL数据库模式(schema)存在多个,原先的表单是默认采用public但是查询表和字段时候有查询所有未进行过滤,导致数据库连接失败、查表字段也为空(空即查询服务端异常错误) 数据库连接配置 添加参数补充 ?currentSchema=dwd 譬如: username=root;password=XXXX;url=jdbc:postg

    2024年02月11日
    浏览(52)
  • DBeaver数据库管理工具安装连接PostgreSQL和DM

    1. 安装 下载地址 https://dbeaver.io/download/ 2. 连接PostgreSQL 配置显示所有数据库 第二个勾选会显示模板数据库 点击 测试连接 ,然后下载驱动 连接成功 3. 连接DM8 3.1 下载驱动 地址 https://eco.dameng.com/document/dm/zh-cn/app-dev/java_Mybatis_frame.html 下载完成解压,将需要的 DmJdbcDriver18.jar 放到

    2024年02月16日
    浏览(54)
  • 如何使用IDEA连接PostgreSQL数据库:从新手到高手的全面指南

    博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接 : 🔗 精选专栏 : 《面试题大全》 — 面试准备的宝典! 《IDEA开发秘籍》 — 提升你的IDEA技能! 《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师! 《100天精通Golang(基础入门篇)》 — 踏入

    2024年04月15日
    浏览(175)
  • 实例讲解C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

      C++ 是一种通用的编程语言,可以使用不同的库和驱动程序来连接各种数据库。以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库。 连接 SQL Server 数据库 要使用 C++ 连接 SQL Server 数据库,可以使用 Microsoft 的 ADODB 库。以

    2024年02月05日
    浏览(66)
  • Python操作PostgreSQL数据库

    个人简介 :一个从会计转行数据分析师的三旬老汉 擅长领域 :数据分析、数据仓库、大数据 博客内容 :平时会将自己工作中遇到的问题进行归纳总结,分享给各位小伙伴,意在帮助大家 少加班 、 不掉发 ,让我们相互学习,一起进步。 本文分享使用Python操作PostgreSQL数据

    2024年02月15日
    浏览(46)
  • PostgreSQL数据库——Docker版本的postgres安装 & Navicat连接方式+导入向导使用 & SpringBoot结合Jpa使用PostgreSQL初步

    1.PostgreSQL数据库初始,开源; 2.Docker版本的postgres安装,以及挂载启动; 3.Navicat连接方式+导入向导使用,导入csv文件; 4.SpringBoot结合Jpa使用PostgreSQL初步; PostgreSQL是一种开源的关系型数据库管理系统(RDBMS),它是一种高度可扩展的、可靠的、功能丰富的数据库系统。以下是

    2024年02月04日
    浏览(78)
  • 使用 Python 连接到 PostgreSQL 数据库

    本文介绍了创建与 PostgreSQL 上的数据库的连接的过程。 我们需要安装 PostgreSQL 和创建数据库等先决条件,如下所述。 顾名思义,PostgreSQL 是一款为高效管理数据库系统而创建的 SQL 系统软件。 在连接Python之前需要创建数据库。 Postgres,实现它。 许多刚开始学习数据库开发的

    2024年04月12日
    浏览(40)
  • 【100天精通python】Day31:使用python操作数据库_数据库编程接口,连接对象和游标对象,数据库连接配置

    目录  专栏导读  一、数据库编程接口 1. Python标准库接口 2. MySQL Connector/Python接口

    2024年02月13日
    浏览(50)
  • 【数据库】如何利用Python中的petl将PostgreSQL中所有表的外键删除,迁移数据,再重建外键

    在数据库管理中,外键是一种重要的约束,用于确保数据的一致性和完整性。然而,在某些情况下,我们可能需要删除或修改外键。本文将介绍如何使用Python中的petl库将PostgreSQL中所有表的外键删除,迁移数据,并重新建立外键。 首先,我们需要安装petl和psycopg2库。在命令行

    2024年02月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包