pb创建数据库详细步骤是什么?新手必看教程
- 虚拟主机
- 2025-12-27
- 5
在程序开发中,使用Python的pb(通常指peewee,一个轻量级的ORM框架)创建数据库是常见的需求。peewee通过简洁的API设计,让开发者无需编写原生SQL语句即可完成数据库的创建、表结构定义及数据操作,以下将详细介绍如何使用peewee创建数据库,包括环境准备、模型定义、数据库连接、表创建及进阶操作等步骤。
环境准备与安装
在使用peewee之前,需确保已安装Python环境(建议3.6+),并通过pip安装peewee库:
pip install peewee
根据需要选择数据库后端(如SQLite、MySQL、PostgreSQL等),例如使用MySQL时需安装mysqlclient或PyMySQL:
pip install mysqlclient
定义数据库模型
peewee的核心是模型(Model)定义,模型类继承自peewee.Model,每个类属性对应数据库表中的一个字段,通过字段类型(如CharField、IntegerField)和约束(如primary_key、unique)定义表结构,定义一个用户表(User)和文章表(Post):

字段类型说明:
- CharField:字符串类型,需指定max_length。
- TextField:长文本类型,适用于内容描述。
- IntegerField:整数类型。
- DateTimeField:日期时间类型,可设置default或auto_now。
- ForeignKeyField:外键,用于关联其他模型,需指定关联模型及反向引用名称(backref)。
连接数据库与创建表
-
初始化数据库连接
在操作前需建立数据库连接。peewee支持多种数据库,通过不同的数据库类实现:
- SQLite:SqliteDatabase
- MySQL:MySQLDatabase
- PostgreSQL:PostgresqlDatabase
连接SQLite数据库:
连接MySQL数据库:
-
创建表
调用db.create_tables()方法,传入模型类列表即可创建表,该方法会自动检查表是否存在,避免重复创建:
db.connect() # 连接数据库 db.create_tables([User, Post]) # 创建User和Post表 db.close() # 关闭连接注意事项:
- 若表已存在,create_tables()默认不会重复创建,可通过safe=True参数忽略错误(如字段变更导致创建失败)。
- 若需强制重建表,需先手动删除表(db.drop_tables([User, Post])),但会丢失数据,需谨慎操作。
-
表选项配置
通过模型类的Meta类配置表选项,如指定表名、排序规则等:

-
索引与约束
除字段自带约束(如unique、null)外,可通过Index创建索引:
class User(BaseModel): username = CharField() email = CharField() class Meta: indexes = ( (('username', 'email'), True), # 联合唯一索引 ) -
数据库迁移
当模型变更时(如新增字段),需修改表结构。peewee不内置迁移工具,但可通过以下方式实现:
- 手动执行SQL语句(如ALTER TABLE)。
- 结合第三方库(如peeweemigrate)进行版本化管理。
完整示例代码
from peewee import * from datetime import datetime # 初始化SQLite数据库 db = SqliteDatabase('example.db') class BaseModel(Model): class Meta: database = db class User(BaseModel): username = CharField(unique=True) password = CharField() email = CharField(null=True) created_at = DateTimeField(default=datetime.now) class Post(BaseModel):= CharField(max_length=200) content = TextField() author = ForeignKeyField(User, backref='posts') status = IntegerField(default=0) created_at = DateTimeField(default=datetime.now) # 创建表 def create_tables(): db.connect() db.create_tables([User, Post]) print("表创建成功!") db.close() if __name__ == '__main__': create_tables()
相关问答FAQs
问题1:如何修改已创建表的结构(如新增字段)?
解答:peewee本身不直接支持表结构修改,需通过原生SQL实现,为Post表新增tags字段:
from playhouse.db_url import connect db = connect('sqlite:///example.db') db.execute_sql("ALTER TABLE post ADD COLUMN tags TEXT DEFAULT ''") # 执行SQL语句
建议使用数据库迁移工具(如Alembic或peeweemigrate)管理版本变更,避免手动操作。
问题2:如何处理数据库连接池问题?
解答:peewee默认不内置连接池,但可通过第三方库实现,使用DBUtils创建连接池:
from DBUtils.PooledDB import PooledDB from peewee import MySQLDatabase # 创建连接池 pool = PooledDB( creator=MySQLDatabase, maxconnections=6, mincached=2, host='localhost', user='root', password='password', database='mydatabase' ) # 从连接池获取数据库连接 db = pool.connection()
连接池可复用连接,提升高并发场景下的性能,需根据业务需求配置连接数上限。

进阶操作与配置