sqlalchemy的数据库ORM操作(表之间的关系)

首先导入一些需要的东东 ,我是在flask中写的,也可以用纯python去写。

from flask import Flask
from sqlalchemy import create_engine, Column, Integer, String,DateTime,Float,func,Text,or_,ForeignKey
from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker,relationship,backref

#1,一对多关系表

#表1
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(50), nullable=False)

#表2 (一对多)
class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(100), nullable=False)
    content = Column(Text, nullable=False)
     
    uid = Column(Integer, ForeignKey("user.id"))

    author = relationship("User", backref='articles')
   
#这个''backref''就是一个反转,效果等同于在Article模型中价格字段 articles = relationship('Article')。注意这个backref后面接的是=,不是()。

#后面就是添加两条数据,然后提交.

#2,  一对一关系表

#表1
class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(50), nullable=False)

    #一对一时候添加的一行代码,其中关键点在于uselist=False,这个加上后就把一对一关系 
    锁定了
    user_extents = relationship('User_extent',uselist=False)

# 用户从表(一对一)
class User_extent(Base):
    __tablename__ = 'user_extent'
    id = Column(Integer, primary_key=True, autoincrement=True)
    country = Column(String(50))

    uid = Column(Integer, ForeignKey('user.id'))
    extent = relationship('User', backref='user_extents')

#后面添加数据,提交

#3, 多对多关系表

先导入Table

from sqlalchemy import create_engine, Column, Integer, String,DateTime,Float,func,Text,or_,ForeignKey,Table
#纽带表
article_tag=Table(
    #表名
    'article_tag',
    Base.metadata,
 #这里就是将两个关键字合并   Column('article_id',Integer,ForeignKey('tag.id'),primary_key=True),
    Column('tag_id',Integer,ForeignKey('article.id'),primary_key=True)
)

#表1
class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50))

   #这个relationship写在下面的表也行,就是关系换了下   
    tags = relationship('Tag',backref='articles',secondary=article_tag)

#表2
class Tag(Base):
    __tablename__ = 'tag'
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(50))

#添加数据
art1 = Article(title='母猪上树了')
art2 = Article(title='你骑上母猪身上了')

tag1 = Tag(name='有趣')
tag2 = Tag(name='搞笑')

art1.tags.append(tag1)
art1.tags.append(tag2)

session.add_all([art1,art2])
session.commit()

猜你喜欢

转载自www.cnblogs.com/shaoqizhi/p/9553720.html