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

sqlalchemy的数据库ORM操作(表之间的关系)的更多相关文章

  1. MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系

    数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...

  2. sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务

    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...

  3. 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系

    基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...

  4. 第八章| 1. MySQL数据库|库操作|表操作

    1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的 ...

  5. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  6. 如何使用sqlalchemy根据数据库里面的表反推出模型,然后进行查询

    关于sqlalchemy映射数据库里面的表,一般情况下我们是需要定义一个模型来映射数据库里面的表的.但是很多时候数据库里面的表都是定义好的,而且字段很多,那么有没有不定义模型,还能使用orm语法查找数 ...

  7. MYSQL--表与表之间的关系、修改表的相关操作

    表与表之间的操作: 如果所有信息都在一张表中: 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性变得极差(致命的缺点) 确立表与表之间的关系.一定要换位思考(必须在两者考虑清楚之后才能得出结论) ...

  8. python 之 数据库(字段的约束条件,表之间的关系)

    10.6 约束条件 10.61 not null .default create table t15( id int, name ) not null, sex enum('male','female ...

  9. smfony设置量表之间的关系

    设置量表之间的关系 验证是否ok 查看我们定义是否有问题 数据库操作 http://www.2cto.com/database/201504/387197.html  设置时间段数据库自动插入时间 不 ...

随机推荐

  1. Andy's First Dictionary---set,stringstream

    https://cn.vjudge.net/contest/177260#problem/C stringstream :https://blog.csdn.net/xw20084898/articl ...

  2. web服务-3、epoll高效率实现并发服务器

    知识点: 之前写的四种方法实现并发服务效率都还是低,早期的服务器采用的是select和poll方式,select这种方式的特点是轮询所有套接字去一个个看有没有事件发生,但是装套接字的列表长度是有限制的 ...

  3. rabbitmq-cluster搭建

    一.前期准备: 准备3台linux系统,配置好公司源,或者官网下载相应的网络源 1.条件:准备3台linux系统,确保能连到download.yunwei.edu 2.编写yum源下载脚本: #vim ...

  4. 【CF765F】Souvenirs 主席树

    [CF765F]Souvenirs 题意:给你一个长度为n的序列{ai},有m个询问,每次询问给出l,r,问在所有$l\le x < y\le r$中,$|a_x-a_y|$的最小值是多少. $ ...

  5. 跑的飞快的dinic

    orz kczno1 目前还是不知道怎么卡,也不会证明复杂度是正确的 其实我感觉卡不了

  6. node版本升级参考

    https://www.cnblogs.com/sese/p/9557161.html

  7. jq三级联动

    test.html <div class="a_list"> <div class="a_title">商城分类:</div> ...

  8. hadoop本地开发环境搭建

    1:下载hadoop2.7.3并解压 2:配置hadoop2.7.3环境变量 HADOOP_HOME %HADOOP_HOME%\bin 3:下载hadoop-eclipse-plugin插件 网址: ...

  9. Selenium 3----鼠标、键盘操作常用方法

    [鼠标] 在 WebDriver 中, 关于鼠标操作的方法封装在 ActionChains 类中. ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 Action ...

  10. c#拷贝整个文件夹到指定文件夹下(非递归)

    public static void CopyEntireDir(string sourcePath, string destPath) { //Now Create all of the direc ...