sqlalchemy

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   通常我们在数据库中设计好了多张表,在SQLAlchemy中有个autoload可以自动加载. 让我们的Model都继承自某个虚类,这个虚类在需要时会自动加载一次表结构   生成我们需要的基类,并绑定数据库连接   定义我们的Model,设置表名和外键关联     可以使用session执行SQL了,scoped_session让maker生成的多个session实际上是重用同一个, autocommit=True容易导致Bugs,我们使用默认设置不开启它。

 

通常我们在数据库中设计好了多张表,在SQLAlchemy中有个autoload可以自动加载.

让我们的Model都继承自某个虚类,这个虚类在需要时会自动加载一次表结构

 

生成我们需要的基类,并绑定数据库连接

 

定义我们的Model,设置表名和外键关联

 

 

可以使用session执行SQL了,scoped_session让maker生成的多个session实际上是重用同一个,

autocommit=True容易导致Bugs,我们使用默认设置不开启它。

在使用过程中发现几个小时后,数据库连接会断掉而没有重新连接,后来在连接时加入pool_recycle=3600,不知是否有用。

保险起见,可以在models中只生成Session类,要用时再创建实例。

 

 

# -*- coding: utf-8 -*-

from sqlalchemy import create_engine, Table
from sqlalchemy.orm import sessionmaker, scoped_session, relationship, backref
from sqlalchemy.ext.declarative import declarative_base, declared_attr
from configs.settings import MYSQL_DATABASES, MYSQL_TABLE_PREFIX


class Base(object):
    __abstract__ = True
    __table_args__ = {"mysql_engine": "InnoDB"}

    @declared_attr
    def __table__(cls):
        name = cls.__tablename__
        return Table(name, cls.metadata, autoload=True)

engine = create_engine( MYSQL_DATABASES["default"] + "?charset=utf8",
                        encoding="utf-8", pool_size=5, pool_recycle=3600)
Base = declarative_base(cls=Base, bind=engine)

class Guide(Base):
    __tablename__ = MYSQL_TABLE_PREFIX + "guide"
    category = relationship("Category",
                primaryjoin="Guide.category_id==Category.id",
                foreign_keys="Guide.category_id",
                backref="guides")
    contents = relationship("Content",
                primaryjoin="Guide.id==Content.guide_id",
                foreign_keys="Content.guide_id",
                order_by="Content.section",
                backref="guide")

class Category(Base):
    __tablename__ = MYSQL_TABLE_PREFIX + "category"

class Content(Base):
    __tablename__ = MYSQL_TABLE_PREFIX + "content"


Session = scoped_session(sessionmaker(autoflush=True))
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
SQL 关系型数据库 API
SQLAlchemy模型使用
SQLAlchemy模型使用
SQLAlchemy模型使用
|
5月前
|
SQL 存储 Go
【译】SQLAlchemy文档:SQLAlchemy 统一教程
【译】SQLAlchemy文档:SQLAlchemy 统一教程
|
5月前
|
SQL 数据库 开发者
Flask、SQLAlchemy
【6月更文挑战第5天】
45 3
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
【Flask实战】sqlalchemy和Flask-SQLAlchemy使用对比
|
存储 SQL 数据库连接
SQLAlchemy常用数据类型
SQLAlchemy常用数据类型
|
SQL 存储 关系型数据库
【flask-sqlalchemy】SQLAlchemy+PyMysql到mysql的映射
【flask-sqlalchemy】SQLAlchemy+PyMysql到mysql的映射
199 0
|
SQL 前端开发 关系型数据库
7. 给Lamb配置flask-sqlalchemy
由于之前已经有一篇介绍flask_sqlalchemy的文章了,这里大体内容就不介绍了。由于在公司的golang项目里有在使用gorm,个人觉得实在是方便,已经从sql奴隶变成了sql大哥,CRUD简直是得心应手。所以这里还是废话不多说,直接采用flask_sqlalchemy。
7. 给Lamb配置flask-sqlalchemy
|
SQL Ubuntu 关系型数据库
SQLALchemy框架
SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架。 SQLAlchemy对象关系映射器提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实例与其对应表中的行相关联
214 0
|
关系型数据库 MySQL 数据库
Flask-SQLAlchemy安装及设置
Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。
2621 1