准备工作

from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, backref # 数据库信息
host = '127.0.0.1'
port = '3306'
database = 'db_to_sqlalchemy'
username = 'root'
password = '123456' # 数据库类型+连接数据库的插件,这里使用的pymysql
DB_URI = f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}' engine = create_engine(DB_URI) # 创建引擎
Base = declarative_base(engine) # 使用declarative_base创建基类
session = sessionmaker(engine)()

创建模型

class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False) def __repr__(self):
return f'User(username: {self.username})' class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
uid = Column(Integer, ForeignKey('user.id')) author = relationship('User', backref='article') def __repr__(self):
return f'Article(title: {self.title})' Base.metadata.drop_all() # 删除所有表
Base.metadata.create_all() # 创建表

插入数据

user = User(username='aaa')
article = Article(title='xxxxxxx')
article.author = user session.add(article)
session.commit()

写SQL删除user信息,报外键约束

使用sqlalchemy删除,成功

user = session.query(User).first()
session.delete(user)
session.commit()

可见,sqlalchemy删除时会将外键设置为null,所以为了使用外键约束,需在建表的时候,设置外键nullable=False,即不允许为空

class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(50), nullable=False) def __repr__(self):
return f'User(username: {self.username})' class Article(Base):
__tablename__ = 'article'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(50), nullable=False)
uid = Column(Integer, ForeignKey('user.id'), nullable=False) author = relationship('User', backref='article') def __repr__(self):
return f'Article(title: {self.title})' Base.metadata.drop_all() # 删除所有表
Base.metadata.create_all() # 创建表 user = User(username='aaa')
article = Article(title='xxxxxxx')
article.author = user session.add(article)
session.commit()

再次删除,就会报错

user = session.query(User).first()
session.delete(user)
session.commit()

最新文章

  1. Canvas 实现图片剪切
  2. Mybatis Generator insert useGeneratedKeys keyProperty
  3. python学习-异常处理
  4. 5、清理mac缓存和关闭后台运行程序
  5. Tips9: Destroy( )函数中的 延迟摧毁 功能
  6. 超好玩!10款神奇的字符图案 & 词汇云生成工具
  7. Select的深入应用(2)
  8. java如何判断字符串是否为空的方法
  9. Linux软连接和硬链接(摘录)
  10. Python学习笔记5-字符串、bool、数值操作和数组字典排序
  11. JQUERY UI DOWNLOAD
  12. 使用angular4和asp.net core 2 web api做个练习项目(一)
  13. 数据结构之【栈】+十进制转d进制(堆栈数组模拟)
  14. 【BZOJ4033】【HAOI2015】树上染色
  15. 从源码安装git
  16. 《团队作业》五小福团队作业--UNO-- LandingDay--降落
  17. EL有11个隐含对象
  18. Docker中安装elasticsearch6.7.1
  19. Windows终端工具_MobaXterm
  20. 设计模式のObserver Pattern(观察者模式)----行为模式

热门文章

  1. 生成大量插入语句,并将语句写入txt文件中
  2. 紫书 例题 10-11 UVa 11181(概率计算)
  3. HDU - 6393 Traffic Network in Numazu (基环树+树链剖分/LCA)
  4. 【51nod1672】区间交
  5. Java分级考试
  6. Idea 一个窗口打开多个项目
  7. [Linux系统] (4)脚本编程
  8. POJ 2299 Ultra-QuickSort (树状数组 && 离散化)
  9. 论文阅读:FlowBlaze: Stateful Packet Processing in Hardware
  10. linux 文件目录介绍