首先导入一些需要的东东 ,我是在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()