• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
demoFootman
博客园    首页    新随笔    联系   管理    订阅  订阅

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()

 

这不是开往幼儿园的车~
posted @ 2018-08-29 13:24  demoFootman  阅读(698)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3