当前位置:首页 > 虚拟主机 > 正文

pb建立数据库连接

在Python编程中,使用Python DBAPI(通常称为pydb)是连接数据库的标准方式,而PyMySQL(MySQL)、psycopg2(PostgreSQL)、sqlite3(SQLite)等库则是具体实现,以PyMySQL为例,建立数据库连接的基本流程包括安装依赖库、导入模块、创建连接对象、执行SQL语句以及关闭连接等步骤,以下是详细步骤和注意事项:

安装必要的库

首先需要安装对应数据库的Python库,连接MySQL数据库需安装PyMySQL:

pip install PyMySQL

对于PostgreSQL,安装psycopg2binary:

pip install psycopg2binary

SQLite作为Python内置模块,无需额外安装。

导入数据库模块

在代码中导入相应的库:

import pymysql # MySQL # import psycopg2 # PostgreSQL # import sqlite3 # SQLite

创建数据库连接

使用connect()函数建立连接,需提供数据库的基本信息,如主机名、用户名、密码、数据库名等,以下是PyMySQL的示例:

connection = pymysql.connect( host='localhost', # 数据库服务器地址 user='root', # 数据库用户名 password='password', # 数据库密码 database='test_db', # 数据库名称 port=3306, # 端口号,MySQL默认3306 charset='utf8mb4', # 字符集 cursorclass=pymysql.cursors.DictCursor # 返回字典格式的结果 )

参数说明

pb建立数据库连接 第1张

  • host:数据库服务器地址,本地为localhost,远程需指定IP或域名。
  • user和password:数据库的登录凭据。
  • database:要连接的数据库名称。
  • port:数据库服务的端口号,不同数据库默认端口不同(如MySQL 3306,PostgreSQL 5432)。
  • charset:字符集,建议使用utf8mb4以支持完整的UTF8编码。
  • cursorclass:游标类型,DictCursor使查询结果以字典形式返回,便于数据处理。

使用游标执行SQL语句

连接成功后,需创建游标对象(Cursor)来执行SQL语句:

try: with connection.cursor() as cursor: # 创建表 create_table_sql = """ CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ) """ cursor.execute(create_table_sql) # 插入数据 insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)" cursor.execute(insert_sql, ('Alice', 'alice@example.com')) # 提交事务 connection.commit() # 查询数据 cursor.execute("SELECT * FROM users") results = cursor.fetchall() for row in results: print(row) finally: connection.close()

关键点

  • 使用with语句管理游标,确保游标自动关闭。
  • 执行插入、更新、删除操作后,需调用connection.commit()提交事务,否则更改不会生效。
  • 查询数据时,fetchall()获取所有结果,fetchone()获取单条结果。

异常处理与连接关闭

数据库操作可能因网络问题、权限不足等失败,需通过tryexcept捕获异常:

pb建立数据库连接 第2张

try: connection = pymysql.connect(...) # 执行SQL操作 except pymysql.MySQLError as e: print(f"数据库错误: {e}") connection.rollback() # 发生错误时回滚事务 finally: if 'connection' in locals() and connection.open: connection.close() # 确保连接关闭

连接池优化(可选)

高频应用场景下,频繁创建和关闭连接会影响性能,此时可使用连接池(如DBUtils或SQLAlchemy):

from DBUtils.PooledDB import PooledDB pool = PooledDB( creator=pymysql, maxconnections=6, host='localhost', user='root', password='password', database='test_db' ) connection = pool.connection() # 从连接池获取连接 # 使用后连接会自动返回池中,无需手动关闭

不同数据库的连接示例对比

以下为常见数据库的连接代码片段:

数据库 连接代码示例
MySQL pymysql.connect(host='localhost', user='root', password='pwd', db='test')
PostgreSQL psycopg2.connect(host='localhost', user='postgres', password='pwd', dbname='test')
SQLite sqlite3.connect('test.db') # 文件路径或memory:(内存数据库)

安全注意事项

  • 避免SQL载入:始终使用参数化查询(如cursor.execute("SELECT * FROM users WHERE name = %s", (name,))),而非字符串拼接。
  • 敏感信息保护:不要将密码等硬编码在代码中,建议通过环境变量或配置文件管理。


相关问答FAQs

Q1: 如何解决“Can’t connect to MySQL server on ‘localhost’”错误?

A: 该错误通常由以下原因导致:

  1. MySQL服务未启动(需通过systemctl start mysql或服务管理器启动)。
  2. 端口号错误(默认3306,若修改过需确认port参数)。
  3. 防火墙拦截(检查服务器防火墙规则或云平台安全组设置)。
  4. 用户权限不足(需在MySQL中执行GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';授权)。

Q2: 数据库连接关闭后,为何仍出现“Connection is closed”错误?

A: 可能原因包括:

  1. 游标或连接对象在with块外被使用(游标和连接的生命周期应限制在with语句内)。
  2. 多线程环境下,连接被其他线程关闭(连接对象非线程安全,建议每个线程独立使用连接或通过连接池管理)。
  3. 事务未提交导致连接被锁定(需确保commit()或rollback()被调用)。

pb建立数据库连接 第3张

0