打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
peewee与mysql的使用

原创文章第145篇,专注“个人成长与财富自由、世界运作的逻辑,AI量化投资"。

Dagster 是一个编排器,旨在开发和维护数据资产,例如表、数据集、机器学习模型和报告。

您声明要运行的函数以及这些函数生成或更新的数据资产。然后,Dagster 会帮助您在正确的时间运行您的功能并让您的资产保持最新。

Dagster 旨在用于数据开发生命周期的每个阶段——本地开发、单元测试、集成测试、暂存环境,一直到生产。

这与我上次调研的,似乎已经发生了变化。上次调研时,对比了airflow, prefect和dagster。是按调度平台来调研的。目前看,官方定位是数据编排器。看起来与大数据、AI项目相关,这倒与AI量化投资可以契合。现在它的核心概念是“数据资产”。

Prefect也进行了大改版,易用性提升了不少。当然,它仍然是一个“去中心化”的调度器,就是server端只负责记录,worker自己启动后去消费队列。对比而言,dagster往更复杂的方向去了,引入了assets为核心,加上了“物化”的概念,云里雾里的。

python生态的web框架,以django, flask和fastapi为代表。django是快速交付的代表,分分钟建一个自带后端的系统,几行代表就够了。但你想替换它原生的组件,比如想使用no sql数据库,如mongo就比较费劲,或者换一个模板引擎,比如Jinjia2,都比较麻烦。另外就是考虑到分布式、高并发的场景,那么传统后端session的模式基本就没有用了,另外对于事务的支持,连接池的支持,这些使用django就比较麻烦了。django最强的两大组件,一是orm;二是admin。但它的admin与orm绑定太紧了。若有定制需求,要突破也不容易。

flask以“微内核”架构,它基本可以“拼装”出一个django,好处是,有很多组件供选择。

当下更多的场景以“前后端分离为主”,后端提供api。那么fastapi优于flask。它自动参数校验,完美整合swagger,原生异步框架等。

ORM今天我来试一下peewee。

pip install peewee

peewee很小,才800多k,sqlalchemy使用繁琐,不那么pythonic。

有时候想想,是否一定要用orm,尤其是一上来就学习orm的同学,离开了orm便不会操作数据库了。其实纯粹的sql操作,也没有多复杂,只是麻烦罢了,早年我们写代码,都会自己封装一层db的操作。

把orm当成自动表结构与python的model对象关联,同时它的playhouse也提供手动migrations。其实这样挺好,自动migrate

使用docker-compose 将mongo与mysql启动:

version: '3'
services:
mongo:
image: 'mongo:4.0'
container_name: mymongo
volumes:
- /root/data/mongo:/data/db
ports:
- 2020:27017
command: mongod --bind_ip_all --auth

mysql:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 3306:3306
volumes:
- /root/data/mysql:/var/lib/mysql
environment:

使用docker一样简单,只不过mongo的密码与用户在终端里管理,而mysql是直接在环境变量里配置。

实例化一个MySQLDatabase,然后把它作为BaseModel的Meta的database的值。

db = MySQLDatabase(database=database, host=host, port=port, user=user, passwd=passwd)


class BaseModel(Model):
class Meta:
database = db

Users用户表继承自BaseModel都会与数据库里的Users表自动关联。

class Users(BaseModel):
# CharField->varchar null->非空约束
name = CharField(verbose_name='姓名', max_length=10, null=False)
passwd = CharField(verbose_name='密码', max_length=20, null=False)
phone = FixedCharField(verbose_name='手机号')

代码非常简洁,但这里有些问题:

连接池的管理,事务如何处理?

db = SqliteDatabase(':memory:')

with db.atomic() as txn:
# This is the outer-most level, so this block corresponds to
# a transaction.
User.create(username='charlie')

with db.atomic() as nested_txn:
# This block corresponds to a savepoint.
User.create(username='huey')

# This will roll back the above create() query.
nested_txn.rollback()

User.create(username='mickey')

连接池:

# 同步数据库连接池
from playhouse.pool import PooledMySQLDatabase

# 数据库实例
db = PooledMySQLDatabase(**db_config, max_connections=10)

peewee很简洁,代码也很容易看明白。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
像对象一样对待数据
几个MySQL在Python中操作示例,MySQL利用于Python实战!
Python学习路线介绍Peewee怎么用
Python的轻量级ORM框架peewee
用 Python 连接 MySQL 的几种姿势
SQLAlchemy vs Other ORMs | Python Central
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服