psycopg使用

1.使用示例

import psycopg2

# 建立数据库连接
conn = psycopg2.connect("dbname=test user=postgres")

# 开启游标操作数据库
cur = conn.cursor()

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

# 传递参数给sql语句占位符,执行该sql语句(可避免sql注入)
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",(100, "abc'def"))

# 查询sql,从查询结果获取数据
cur.execute("SELECT * FROM test;")
cur.fetchone()
#(1, 100, "abc'def")

# 提交
conn.commit()

# 关闭数据库连接
cur.close()
conn.close()

2.向sql语句传递参数
1)第一个参数sql语句,使用%s作占位符;第二个参数为元组或数组,待传递参数。

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

2)第一个参数sql语句,使用%(name)s作占位符;第二个参数为dict,待传递参数。

 cur.execute("""
INSERT INTO some_table (an_int, a_date, another_date, a_string)
VALUES (%(int)s, %(date)s, %(date)s, %(str)s);
""",
{'int': 10, 'str': "O'Reilly", 'date': datetime.date(2005, 11, 18)})

3)sql注入

SQL = "INSERT INTO authors (name) VALUES ('%s');" # NEVER DO THIS
data = ("O'Reilly", )
cur.execute(SQL % data) # 错误使用方法
SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes
data = ("O'Reilly", )
cur.execute(SQL, data) # 正确使用方法,使用两个参数,可以避免sql注入

3.python数据类型适应psycopg数据类型
300946-20171115190833718-913280018.png

### psycopg2 的基本使用方法 #### 简介 `psycopg2` 是一个用于 Python 和 PostgreSQL 数据库交互的适配器[^2]。它允许开发者通过 Python 脚本执行 SQL 命令并管理数据库中的数据。 #### 安装 如果尚未安装 `psycopg2`,可以通过以下命令完成安装: ```bash pip install psycopg2 ``` 此命令会自动下载并配置所需的依赖项以支持与 PostgreSQL 的连接[^3]。 #### 连接到 PostgreSQL 数据库 要建立与 PostgreSQL 数据库的连接,需提供必要的参数(如主机名、端口、用户名、密码以及数据库名称)。以下是创建连接的一个示例代码片段: ```python import psycopg2 try: connection = psycopg2.connect( host="localhost", database="your_database_name", user="your_username", password="your_password" ) except Exception as e: print(f"Error connecting to the database: {e}") ``` 上述代码尝试建立到指定 PostgreSQL 实例的连接,并捕获可能发生的异常以便调试[^1]。 #### 执行 SQL 查询 一旦建立了有效的数据库连接,就可以利用游标对象来执行查询语句。下面是一个简单的 SELECT 查询例子: ```python cursor = connection.cursor() query = "SELECT * FROM your_table_name LIMIT 5;" cursor.execute(query) rows = cursor.fetchall() # 获取所有返回的结果行 for row in rows: print(row) cursor.close() connection.close() ``` 这段脚本展示了如何打开游标、运行查询并将结果打印出来后再关闭资源[^5]。 #### 插入和更新数据 对于修改型的操作比如 INSERT 或 UPDATE ,同样需要借助于游标的 execute 方法。这里给出向表中添加新记录的例子: ```python insert_query = """INSERT INTO employees (name, position, salary) VALUES (%s, %s, %s);""" data_to_insert = ("John Doe", "Software Engineer", 70000) cursor = connection.cursor() cursor.execute(insert_query, data_to_insert) connection.commit() print("Record inserted successfully.") cursor.close() connection.close() ``` 注意每次更改都需要调用 commit 函数提交事务才能使改动生效;否则,在断开链接前这些变化不会保存至实际存储介质上。 #### 错误处理 当遇到任何类型的错误时,应该始终有相应的机制去捕捉它们从而防止程序崩溃或者丢失重要信息。例如上面提到过的 try-except 结构就是一种常见的方式用来检测连接过程中可能出现的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值