sqlalchemy数据模型

sqlalchemy在python里作为orm还是比较有名气的,以下是建立的几个简单模型,完全可和flask的数据持久层分离。

  1 # coding: utf8
  2 from sqlalchemy import Column, String, Integer, DateTime, BigInteger, Numeric, ForeignKey, SmallInteger, create_engine
  3 from sqlalchemy.ext.declarative import declarative_base
  4 from sqlalchemy.orm import create_session, relationship
  5
  6 Base = declarative_base()
  7 _db_session = None
  8
  9
 10 def get_engine():
 11     return create_engine(‘mysql+pymysql://root:[email protected]/wms?charset=utf8‘, echo=True)
 12
 13
 14 def get_session():
 15     if _db_session is None:
 16         engine = get_engine()
 17         return create_session(engine)
 18     else:
 19         return _db_session
 20
 21
 22 def create_all():
 23     engine = get_engine()
 24     Base.metadata.create_all(engine)
 25
 26
 27 def drop_all():
 28     engine = get_engine()
 29     Base.metadata.drop_all(engine)
 30
 31
 32 class Role(Base):
 33     __tablename__ = ‘a_role‘
 34     code = Column(String(20), primary_key=True)
 35     label = Column(String(50))
 36
 37
 38 class User(Base):
 39     __tablename__ = ‘a_user‘
 40     id = Column(BigInteger, primary_key=True)
 41     code = Column(String(20), nullable=False, index=True, unique=True)
 42     label = Column(String(50))
 43     pwd = Column(String(50))
 44     create_date = Column(DateTime)
 45     memo = Column(String(50))
 46     role_code = Column(String(20), ForeignKey(‘a_role.code‘))
 47     role = relationship(‘Role‘, backref=‘users‘)
 48
 49
 50 class SupplierClass(Base):
 51     __tablename__ = ‘a_supplier_class‘
 52     code = Column(String(30), primary_key=True)
 53     label = Column(String(50))
 54
 55
 56 class Supplier(Base):
 57     __tablename__ = ‘a_supplier‘
 58     id = Column(BigInteger, primary_key=True)
 59     code = Column(String(30), index=True)
 60     label = Column(String(50))
 61     tel = Column(String(30))
 62     address = Column(String(50))
 63     contacts = Column(String(30))
 64     level = Column(SmallInteger)
 65     create_date = Column(DateTime)
 66     memo = Column(String(50))
 67     class_code = Column(String(30), ForeignKey(‘a_supplier_class.code‘))
 68     supplier_class = relationship(‘SupplierClass‘, backref=‘suppliers‘)
 69
 70
 71 class Warehouse(Base):
 72     __tablename__ = ‘a_warehouse‘
 73     code = Column(String(30), primary_key=True)
 74     label = Column(String(50))
 75     address = Column(String(50))
 76     create_date = Column(DateTime)
 77     memo = Column(String(50))
 78     manager_id = Column(BigInteger, ForeignKey(‘a_user.id‘))
 79     manager = relationship(‘User‘)
 80
 81
 82 class LocationClass(Base):
 83     __tablename__ = ‘a_location_class‘
 84     code = Column(String(30), primary_key=True)
 85     label = Column(String(50))
 86
 87
 88 class Location(Base):
 89     __tablename__ = ‘a_location‘
 90     id = Column(BigInteger, primary_key=True)
 91     code = Column(String(30), index=True)
 92     label = Column(String(50))
 93     max_qty = Column(Numeric(10, 2))
 94     create_date = Column(DateTime)
 95     memo = Column(String(50))
 96     warehouse_code = Column(String(30), ForeignKey(‘a_warehouse.code‘))
 97     manager_id = Column(BigInteger, ForeignKey(‘a_user.id‘))
 98     class_code = Column(String(30), ForeignKey(‘a_location_class.code‘))
 99     manager = relationship(‘User‘)
100     warehouse = relationship(‘Warehouse‘)
101     location_class = relationship(‘LocationClass‘)
102
103
104 class ItemClass(Base):
105     __tablename__ = ‘a_item_class‘
106     code = Column(String(30), primary_key=True)
107     label = Column(String(50))
108
109
110 class Item(Base):
111     __tablename__ = ‘a_item‘
112     id = Column(BigInteger, primary_key=True)
113     code = Column(String(30), index=True)  # 物料代码
114     label = Column(String(100))  # 品名
115     type = Column(SmallInteger)  # 0原材料,1半成品,2成品
116     class_code = Column(String(30), ForeignKey(‘a_item_class.code‘))
117     location_id = Column(BigInteger, ForeignKey(‘a_location.id‘))
118     item_class = relationship(‘ItemClass‘)  # 物料分类
119     location = relationship(‘Location‘)  # 推荐库位
120     safety_stock = Column(Numeric(10, 2))  # 安全库存
121     mpq = Column(Numeric(10, 2))  # 最小包装数量
122     create_date = Column(DateTime)
123     memo = Column(String(50))
124
125
126 # drop_all()
127 # create_all()
时间: 2024-08-24 12:07:39

sqlalchemy数据模型的相关文章

基础入门_Python-模块和包.深入SQLAlchemy之SQLAlchemy ORM重构表?

简单介绍: 说明: 此模块主要用于将关系型数据库表映射到PY的类,行映射到PY类的实例,列映射为PY实例的属性,由于其兼容众多DB-API及扩展,SO可以优先考虑数据模型,而忽略底层的DB-API切换,数据迁移更方便. 快速安装: pip install --upgrade SQLAlchemy 定义结构: #!/usr/bin/env python # -*- coding: utf-8 -*- """ # # Authors: limanman # OsChina: ht

基础入门_Python-模块和包.深入SQLAlchemy之列级别约束与表级别约束?

简单介绍: 说明: 此模块主要用于将关系型数据库表映射到PY的类,行映射到PY类的实例,列映射为PY实例的属性,由于其兼容众多DB-API及扩展,SO可以优先考虑数据模型,而忽略底层的DB-API切换,数据迁移更方便. 快速安装: pip install --upgrade SQLAlchemy 创建引擎: 1. 连接数据库前需创建引擎,作为执行SQL的接口,其实底层通过Pool(连接池)和Dialect(翻译器)将映射后的PY语句转换为对应DB-API支持的原生SQL语句去执行,这样写PY时就

sqlalchemy 映射的小例子

1.多张表映射到一个类 import pandas as pdfrom settings import DATABASESfrom sqlalchemy import create_engineimport sqlalchemy.ormimport sqlalchemy.ext.declarative metadata = sqlalchemy.MetaData() STK_BASIC_INFO_table = sqlalchemy.Table('quant_stk_basic_info', m

使用 sqlautocode 自动生成 SQLAlchemy 的 ORM 设置脚本

日常工作中,我喜欢使用 MySQL Workbench 的数据模型工具跟踪和管理数据库的变更以及生成管理所需的文档.然而每当数据库的结构稍作变更,也需要同时修改使用SQLAlchemy 编写的 ORM 设置脚本.使用 SqlSoup 固然可以在不配置 ORM 的情况下使用 SQLAlchemy 的主要功能,但是是否能够根据现有的数据库自动生成脚本呢?上网搜索了一下,找到了这个名为 sqlautocode 的实用工具.只需在命令行中执行 sqlautocode 命令即可根据参数自动生成代码! 其调

python sqlalchemy JSON

SQLAlchemy转换成json格式 SQLAlchemy查询出来object转换成json格式,如果数据模型中没有使用外键的话.那么可以直接调用object中的dict方法即可将object转换成dict格式,之后json.dumps即可. 如果数据模型中使用了外键,在调用dict方法后,会有个一个"_sa_instance_state"的key,其value则是一个object,对于外键有很多个可配置对参数: backref:在一对多或多对一之间建立双向关系 lazy:默认值是T

python下SQLAlchemy的使用

SQLAlchemy是python中orm常用的框架.支持各种主流的数据库,如SQLite.MySQL.Postgres.Oracle.MS-SQL.SQLServer 和 Firebird. 在安装好SQLAlchemy之后导入相关的模块,如下是一些常用的模块,也可以根据项目的实际需要在添加. from sqlalchemy import Column, String, create_engine #导入包 from sqlalchemy.orm import sessionmaker fro

Python3之sqlalchemy

SqlAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简而言之:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. ORM(对象关系映射)方法论基于三个核心原则: 简单:以最基本的形式建模数据 传达性:数据库结构被任何人都能理解的语言文档化 精准性:基于数据模型创建正确标准化了的结构 Dialect用于和数据API进行交流,根据配置文件的不同调用的数据库API,从而实现对数据库的操作,如: '数据库类型+数据库驱

使用SqlAlchemy时如何方便的取得dict数据、dumps成Json

使用Sqlalchemy可以方便的从数据库读取出python对象形式的数据(吐槽:说实话对象形式也没多方便,还不如我之前从关系型数据库直接读取出dict形式的数据用起来方便,具体参见我以前的文章http://zhengxiaoyao0716.lofter.com/post/1d6e9c56_93d6d00)) 然而对象形式的数据是不方便直接进行http传递的,一般转化成Json比较方便.而如果你直接对从数据库取得的对象dumps或jsonify,会得到一个错误.Google一下其实是有不少解决方

Flask:05-一首歌的时间掌握flask数据模型(01)

数据模型 数据库回顾 分类: 关系型数据库:MySQL.sqlite.- 非关系型数据库:Redis.MongoDB.- 操作: 执行原生SQL语句,每次都需要拼接SQL语句,非常繁琐而且特别容易出错. ORM(对象关系映射),使用ORM可以通过对对象的操作完成对数据库的操作. flask-sqlalchemy 说明:其实是sqlalchemy扩展库在flask中的移植库,通过了绝大多数关系型数据库的支持(ORM) 安装:pip install flask-sqlalchemy 连接地址配置: