首先导入一些需要的东东 ,我是在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. 数据挖掘算法——Apriori算法

    Apriori算法  首先,Apriori算法是关联规则挖掘中很基础也很经典的一个算法. 转载来自:链接:https://www.jianshu.com/p/26d61b83492e 所以做如下补充: ...

  2. XVII Open Cup named after E.V. Pankratiev. Eastern GP, Division 1

    A. Count The Ones $ans=b-c+1$. #include <stdio.h> using namespace std ; int a , b , c ; void s ...

  3. 机器学习——KNN

    导入类库 import numpy as np from sklearn.neighbors import KNeighborsClassifier from sklearn.model_select ...

  4. Spring 使用 feign时设置header信息

    最近使用 SpringBoot 项目,把一些 http 请求转为 使用 feign方式.但是遇到一个问题:个别请求是要设置header的. 于是,查看官方文档和博客,大致推荐两种方式.也可能是我没看明 ...

  5. Android常用的工具类SharedPreferences封装类SPUtils

    package com.zhy.utils; import java.lang.reflect.InvocationTargetException; import java.lang.reflect. ...

  6. Hibernate-day02

    OID 1,对象里面没有主键的概念,对象中对应主键的属性,称为OID(对象标识符);2,OID用来唯一标明一个对象实体(加上对象类型)3,OID在对象里面不见得只有一个属性;(映射复合主键)4,OID ...

  7. HBuilder

    什么是HBuilder? HBbuilder是DCloud(数字天堂)推出的一款支持HTML5的WEB开发IDE,主体是由java编写的,它将HTML/JS代码块进行代码封装,达到简单数据形成代码的特 ...

  8. laravel整合workerman做消息推送系统

    官方建议分离 workerman和mvc框架的结合,我去,这不是有点脑缺氧吗? 大量的业务逻辑,去独立增加方法和类库在写一次,实际业务中是不现实和不实际的 gateway增加一些这方面的工作,但是我看 ...

  9. Codeforces Round #542 题解

    Codeforces Round #542 abstract I决策中的独立性, II联通块染色板子 IIIVoronoi diagram O(N^2 logN) VI环上距离分类讨论加取模,最值中的 ...

  10. csv impor export with mysql

    server-side:SELECT id,tutorialId,tutorialName,ucreatelink,structureVersion FROM base_courseINTO OUTF ...