ORM的两种创建方式

数据库优先:指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码

代码优先:就是先写代码,然后根据代码去生成数据库结构。

代码优先创建数据库的本质:拿到类-->转换成table对象, 然后根据table对象生成sql语句--> 生成数据库表结构

另外两个知识点:

  • 改变数据输出的方式:可以在表的类中定义一个特殊成员:__repr__,return一个自定义的由字符串拼接的数据连接方式.
  • 数据库中表关系之间除了MySQL中标准的外键(ForeignKey)之外,还可以创建一个虚拟的关系,比如group = relationship("Group",backref='uuu'),一般此虚拟关系与foreignkey一起使用.

SQLalchemy联表操作

1.一对多关系

需求:

  1. 用户组,有dba,ddd组
  2. 用户,用户只能属于一个用户组

两个表如下:

group表:

Python - SQLAlchemy之连表操作

user表:

Python - SQLAlchemy之连表操作

创建上述两个表:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# auth : pangguoping

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine


engine = create_engine("mysql+pymysql://root:123@192.168.29.128:3306/s13", max_overflow=5)

Base = declarative_base()

#创建一对多表
class Group(Base):
    __tablename__ = 'group'
    nid = Column(Integer,primary_key=True,autoincrement=True)
    caption = Column(String(32))
class User(Base):
    __tablename__ = 'user'
    nid = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(32))
    group_id = Column(Integer,ForeignKey('group.nid'))
    group = relationship("Group",backref='uuu')
    #这个方法输出什么,对象就获取什么
    def __repr__(self):
        temp = '%s - %s:%s' %(self.nid,self.username,self.group_id)
        return temp
def init_db():
    Base.metadata.create_all(engine)
init_db()
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-01
  • 2022-03-09
  • 2021-07-14
猜你喜欢
  • 2021-08-26
  • 2021-12-31
相关资源
相似解决方案