关于psycopg

本文介绍了Python中PostgreSQL数据库接口psycopg2的基本用法,包括连接数据库、创建表、插入数据、查询数据等操作示例。

一、基本概念

psycopg,是Python语言的PostgreSQL数据库接口


二、psycopg2接口的基本用法示例


原文:http://zhiwei.li/text/2012/02/05/psycopg2%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95/

与其他实现了DB API 2.0协议的其他数据库用户基本一致。

import psycopg2

##连接到一个存在的数据库
conn = psycopg2.connect(“dbname=test user=postgres”)
##connect()建立一个新的数据库会话,并返回一个connect实例

##打开一个光标,用来执行数据库操作
cur = conn.cursor()

##执行命令:建立一个新表

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

##传递数据用来填充查询占位符, 让Psycopg执行正确的转换(不再有SQL注入)

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”)

##使改变永久存入数据库

conn.commit()

##关闭到数据库的通信

cur.close()
conn.close()

python数据类型到SQL类型的适配

日期和时间对象: python内建的datetime, date, time, timedelta 被转换成 PostgreSQL的 timestamp, date, time, interval 数据类型. Time zones are supported too. The Egenix mx.DateTime objects are adapted the same way:

 

>>> dt = datetime.datetime.now()

>>> dt datetime.datetime(2010, 2, 8, 1, 40, 27, 425337)

>>> cur.mogrify(“SELECT %s, %s, %s;”, (dt, dt.date(), dt.time())) “SELECT ‘2010-02-08T01:40:27.425337’, ‘2010-02-08′, ’01:40:27.425337′;”

>>> cur.mogrify(“SELECT %s;”, (dt – datetime.datetime(2010,1,1),)) “SELECT ’38 days 6027.425337 seconds’;”




Psycopg 是 Python 编程语言中最常用的 PostgreSQL 数据库适配器之一。Psycopg3 是其最新版本,尽管安装包名称仍为 `psycopg`。以下信息将帮助您了解如何安装、配置和解决常见问题。 ### 安装 Psycopg3 Psycopg3 支持多种安装方式,开发者可以根据自己的操作系统和项目需求选择合适的安装方法。 - **使用 pip 安装** 对于大多数开发环境,最简单的方式是通过 `pip` 安装 Psycopg3。可以使用以下命令安装: ```bash pip install psycopg ``` 此命令将从 PyPI 获取最新版本并安装到当前 Python 环境中[^1]。 - **从源码安装** 如果需要自定义构建(例如,为了启用特定功能或优化性能),可以从源码编译安装。这通常需要安装 PostgreSQL 的开发文件(如头文件和库文件)。 ```bash git clone https://github.com/psycopg/psycopg.git cd psycopg pip install -e . ``` 这将克隆官方仓库并在开发模式下安装 Psycopg3,方便调试和贡献代码。 - **在特定操作系统上的安装** 不同操作系统可能需要额外的依赖项。例如,在 Ubuntu 上,需要安装 `libpq-dev` 包来提供 PostgreSQL 开发文件: ```bash sudo apt-get install libpq-dev ``` 安装完成后,即可使用 `pip install psycopg` 命令安装 Psycopg3。 ### Psycopg3 使用指南 使用 Psycopg3 连接 PostgreSQL 数据库通常包括以下几个步骤: 1. **建立连接** 使用 `psycopg.connect()` 方法建立与数据库的连接。该方法接受一个 DSN(Data Source Name)字符串作为参数,格式如下: ```python import psycopg conn = psycopg.connect("dbname=mobsf_db user=username password=password host=localhost port=5432") ``` 2. **创建游标** 游标对象用于执行 SQL 查询并获取结果: ```python cur = conn.cursor() ``` 3. **执行 SQL 语句** 可以使用游标对象的 `execute()` 方法运行 SQL 查询: ```python cur.execute("SELECT * FROM users;") ``` 4. **获取查询结果** 查询结果可以通过 `fetchall()`、`fetchone()` 等方法获取: ```python rows = cur.fetchall() for row in rows: print(row) ``` 5. **提交事务** 如果执行了写操作(如 `INSERT`、`UPDATE`、`DELETE`),必须提交事务以使更改生效: ```python conn.commit() ``` 6. **关闭连接** 完成操作后,应关闭游标和连接以释放资源: ```python cur.close() conn.close() ``` ### 常见问题与解决方法 1. **无法连接数据库** 如果出现连接失败的问题,首先检查数据库服务是否正在运行,并确认连接字符串中的主机名、端口、用户名和密码是否正确。可以尝试使用 `psql` 命令行工具测试连接: ```bash psql -h localhost -p 5432 -U username -d mobsf_db ``` 2. **缺少依赖库** 在某些系统上,安装 Psycopg3 可能会因为缺少 PostgreSQL 开发库而失败。请确保已安装 PostgreSQL 的开发文件(如 `libpq-dev` 或 `postgresql-devel`)[^1]。 3. **SSL 连接问题** 如果数据库启用了 SSL 而客户端未正确配置,可能会导致连接失败。可以在连接字符串中添加 `sslmode=require` 以强制使用 SSL: ```python conn = psycopg.connect("dbname=mobsf_db user=username password=password host=localhost port=5432 sslmode=require") ``` 4. **编码问题** 如果在处理非 ASCII 字符时遇到问题,可以检查数据库和连接的编码设置。默认情况下,Psycopg3 会使用数据库的编码,但也可以在连接字符串中显式指定: ```python conn = psycopg.connect("dbname=mobsf_db user=username password=password host=localhost port=5432 client_encoding=utf8") ``` 5. **性能优化** 对于大规模数据操作,建议使用 `executemany()` 方法批量插入数据,而不是逐条执行 `execute()`。此外,可以考虑使用连接池(如 `psycopg_pool`)来提高并发性能。 ### 示例代码 以下是一个完整的示例,演示如何使用 Psycopg3 连接 PostgreSQL 数据库并执行查询: ```python import psycopg # 建立连接 conn = psycopg.connect("dbname=mobsf_db user=username password=password host=localhost port=5432") # 创建游标 cur = conn.cursor() # 执行查询 cur.execute("SELECT * FROM users;") # 获取结果 rows = cur.fetchall() for row in rows: print(row) # 关闭连接 cur.close() conn.close() ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值