公司网站制作效果怎么样,潜江资讯网,昆山企业网站建设公司,网站上的聊天框怎么做的介绍
有时候需要用 Python 直接操作数据库, 手工撸 SQL 倒也不是不能行, 但是总觉得有点背离了 人生苦短, 我用 Python 的初心, 习惯了 SQLAlchemy 的直接操作后, 就变懒了. 但是对于比较简单的数据库操作场景, 再跑一套 SQLAlchemy 又显得有些臃肿, 这次上手轻量 Python ORM …介绍
有时候需要用 Python 直接操作数据库, 手工撸 SQL 倒也不是不能行, 但是总觉得有点背离了 人生苦短, 我用 Python 的初心, 习惯了 SQLAlchemy 的直接操作后, 就变懒了. 但是对于比较简单的数据库操作场景, 再跑一套 SQLAlchemy 又显得有些臃肿, 这次上手轻量 Python ORM 选手 peewee
上 Demo
# 安装依赖
pip install peewee pymysql fakerfrom peewee import *
from datetime import datetime
from faker import Faker# 定义数据库连接
db MySQLDatabase(databasepeewee_db, userroot, passwordlpwm86, hostdebian.lan, port3306
)# 定义基础模型
class BaseModel(Model):# Peewee 会自动创建一个自动编号的主键 id, 所以没啥特别场景可以不用定义class Meta:database db# 定义用户模型
class User(BaseModel):login CharField(uniqueTrue)password CharField()name CharField(uniqueTrue)join_date DateField()# 定义角色模型
class Role(BaseModel):name CharField()users ManyToManyField(User, backrefroles) # backref 后面的名字可以被关联的对象通过 user.roles 方式访问# 用户和角色多对多的映射表
UserRole Role.users.get_through_model()# 定义文章模型
class Post(BaseModel):title CharField()content TextField()author ForeignKeyField(User)# 连接数据库
db.connect()
print(Db connected.)# 创建数据表
db.create_tables([User, Role, Post, UserRole])
print(Table created.)db.execute_sql(set foreign_key_checks0)
table: BaseModel
for table in [User, Role, Post, UserRole]:table.truncate_table()print(f{table._meta.name} truncated)db.execute_sql(set foreign_key_checks1)# 插入测试数据
faker Faker()
role_admin: Role Role.create(name管理员)
role_normal: Role Role.create(name普通用户)admin_user: User User.create(loginadmin, passwordadmin123, name管理员, join_datedatetime.now().date()
)
admin_user.roles.add(role_admin)for x in range(0, 10):# 添加用户user User.create(loginfaker.user_name(),passwordfaker.password(),namefaker.name(),join_datefaker.date_object(),)user.roles.add(role_normal)# 添加测试文章for y in range(0, 10):post Post.create(titlefaker.text(50), contentfaker.text(800), authoruser)# 查询数据
print(- * 10)
print(查询所有用户:)
print(- * 10)
_user: User
for _user in User.select():print(_user.name)print(- * 10)
print(查询文章总数:)
print(- * 10)
print(Post.select().count())print(- * 10)
print(查询所有role.name普通用户)
print(- * 10)
_role Role.select().where(Role.name 普通用户).get()
for _user in _role.users:print(_user.name)print(- * 10)
print(查询用户 id2 的所有文章)
print(- * 10)
user_2 User.select().where(User.id 2)
_post: Post
for _post in Post.select().where(Post.author user_2):print(_post.title)