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()
sqlalchemy的数据库ORM操作(表之间的关系)的更多相关文章
- MySQL数据库:SQL语句基础、库操作、表操作、数据类型、约束条件、表之间的关系
数据库相关概念: 1. 数据库服务器:运行数据库管理软件的计算机 2. 数据库管理软件:MySQL.Oracle.db2.slqserver 3. 库:文件夹,用来组织文件/表 4. 表:文件(类似于 ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- 基础概念:Oracle数据库、实例、用户、表空间、表之间的关系
基础概念:Oracle数据库.实例.用户.表空间.表之间的关系 数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件).其实Oracle数据库 ...
- 第八章| 1. MySQL数据库|库操作|表操作
1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的 ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- 如何使用sqlalchemy根据数据库里面的表反推出模型,然后进行查询
关于sqlalchemy映射数据库里面的表,一般情况下我们是需要定义一个模型来映射数据库里面的表的.但是很多时候数据库里面的表都是定义好的,而且字段很多,那么有没有不定义模型,还能使用orm语法查找数 ...
- MYSQL--表与表之间的关系、修改表的相关操作
表与表之间的操作: 如果所有信息都在一张表中: 1.表的结构不清晰 2.浪费硬盘空间 3.表的扩展性变得极差(致命的缺点) 确立表与表之间的关系.一定要换位思考(必须在两者考虑清楚之后才能得出结论) ...
- python 之 数据库(字段的约束条件,表之间的关系)
10.6 约束条件 10.61 not null .default create table t15( id int, name ) not null, sex enum('male','female ...
- smfony设置量表之间的关系
设置量表之间的关系 验证是否ok 查看我们定义是否有问题 数据库操作 http://www.2cto.com/database/201504/387197.html 设置时间段数据库自动插入时间 不 ...
随机推荐
- es elasticsearch-head安装
---恢复内容开始--- 参考 https://www.jianshu.com/p/36d7f97a20cd 1.下载安装git clone git://github.com/mobz/elastic ...
- python 试题
1.现有两元祖 (('a'),('b'),('c'),('d') ) ,请使用Python中的匿名函数生成列表 [ {'a':'c'},{'c':'d'}] 答案:v = list(map(lambd ...
- Python网络爬虫之三种数据解析方式
1. 正则解析 正则例题 import re # string1 = """<div>静夜思 # 窗前明月光 # 疑是地上霜 # 举头望明月 # 低头思故乡 ...
- 2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)
A. Assignment Algorithm 按题意模拟即可. #include<stdio.h> #include<iostream> #include<string ...
- NOIP-扫雷游戏
题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有 ...
- 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D
[树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...
- 13、vue.js简单入门
本篇导航: 介绍与安装 vue常用指令 一.介绍与安装 vue是一套构建用户界面的JAVASCRIPT框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层, ...
- vue_ajax 请求
yarn add vue-resource axios npm install --save axios pubsub-js // import VueResource from "vue- ...
- 傅里叶变换及其应用讲义(stanford_ee261)
链接:http://pan.baidu.com/s/1bprVIqF 密码:q5iv
- day 22 二十二、面向对象导入、名称空间、类与对象
一.面向对象导入 1.含义: ①面向过程: 重过程:解决问题,考虑的是解决问题的流程 解决问题的思路清晰,但拓展性不强 ②面向对象: 重对象:解决问题,找到解决问题的对象 解决问题的思路可能不止一条( ...