Flask中的的SQLAlchemy
好久没有更新Blog了
今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有的孩子已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好用
我在这里辟谣一下, Models 紧紧只是配置和使用比较简单,因为他是Django自带的ORM框架,也正是因为是Django原生的,所以兼容性远远不如SQLAlchemy
真正算得上全面的ORM框架是我们的SQLAlchemy ORM框架,它可以在任何使用SQL查询时使用
当然了,无论是使用什么ORM框架,都是为了方便不熟练数据库的同学使用的,个人还是比较推崇原生 SQL 哈
ok,我们来看一下 SQLAlchemy 如何使用:
1.创建表的一波说不出来但很牛x的操作
#create_table.py
#通过SQLAlchemy创建数据表
# 1.导入SQLAlchemy,没安装的记得安装一下啊
from sqlalchemy.ext.declarative import declarative_base # 2.创建ORM模型基类
Base = declarative_base() # 相当于Django Model # 3.导入ORM对应数据库数据类型的字段
from sqlalchemy import Column, Integer, String # 4.创建ORM对象
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(32), index=True) # 5.创建数据库连接
from sqlalchemy import create_engine #mysql+pymysql用mysql数据库+pymysql,root用户,614615数据库密码,@127.0.0.1本地地址,3306数据库端口号,led数据库名,剩下的是字符编码,这要是不懂,滚!!!
engine = create_engine("mysql+pymysql://root:614615@127.0.0.1:3306/led?charset=utf8")
# 数据库连接创建完成 # 6.去数据库中创建与User所对应的数据表
# 去engine数据库中创建所有继承Base类的 ORM对象
Base.metadata.create_all(engine)
2.增的操作
#curd_insert.py # 增
# 1.打开数据库的链接
from create_table import engine
# 2.创建绘画
from sqlalchemy.orm import sessionmaker
# 3.创建会话的窗口
Session = sessionmaker(engine)
# 4.打开会话窗口
db_session = Session()
from create_table import User
with open('name.txt','r')as f:
for i in f.read():
db_session.add_all([
User(name=i),
]) db_session.commit()
db_session.close()
#这里说一下,add和add_all的区别,就是单挑和多条的差距,当然,add_all也可以插入单条,只不过消耗的资源多一些,
3.5改的高级操作
#curd_update_more.py from sqlalchemy.orm import sessionmaker
from create_table import User,engine
Session = sessionmaker(engine)
db_session = Session() #直接修改
db_session.query(User).filter(User.id > 10).update({"name":""})
db_session.commit()
db_session.close() #原有值的基础上添加 -2
db_session.query(User).filter(User.id > 0).update({User.name:User.name + "-2"},synchronize_session=False)
db_session.commit()
db_session.close()
3.改的操作
#curd_update.py # 更新 from sqlalchemy.orm import sessionmaker
from create_table import User,engine
Session = sessionmaker(engine)
db_session = Session() ret = db_session.query(User).filter(User.name == "李志强").update({"name":"好人"})
db_session.commit()#切记!!执行语句
db_session.close()#关闭会话 ret = db_session.query(User).filter(User.id >=60).update({"name":"我是好人"})
db_session.commit()
db_session.close()
4.查的操作
#curd_select.py #查 from create_table import engine
from create_table import User
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine)
db_session = Session() # 1.简单的查询
res = db_session.query(User).all()
for i in res:
print(i.name) res_list = db_session.query(User).first()
print(res_list.id) # 2.有条件的查询
ret = db_session.query(User).filter(User.name == "李二短").first()
# 因为这里查到一个所以不会用索引取值
print(ret.name,ret.id) ret = db_session.query(User).filter(User.name == "浩").all()
# 这里查到所有所以会用索引取值第一个
print(ret[0].name,ret[0].id) ret = db_session.query(User).filter(User.id >= 60).all()
# 这里说一下,查询所有的id>=60的,查询所有进行遍历取值
for i in ret:
print(i.name,i.id) # 查看原生的sql语句办法
ret = db_session.query(User).filter(User.id >= 60)
print(ret)
5.删除的操作
curd_delete.py
# 删除 from sqlalchemy.orm import sessionmaker
from create_table import engine,User Session = sessionmaker(engine)
db_session = Session() ret = db_session.query(User).filter(User.name == "我是好人").delete()
db_session.commit()
db_session.close()
# print(ret) ret = db_session.query(User).filter(User.id >= 20).delete()
db_session.commit()
db_session.close()
# print(ret)
二.一对多的表关系操作ForeginKey
1.创建一对多的表关系
#create_table_ForeginKey.py # 一对多建表操作
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
from sqlalchemy import create_engine
from sqlalchemy import Column,Integer,String,ForeignKey
from sqlalchemy.orm import relationship class School(Base):
__tablename__ = 'school'
id = Column(Integer,primary_key=True)
name = Column(String(32)) class Student(Base):
__tablename__ = 'student'
id = Column(Integer,primary_key=True)
name = Column(String(32))
school_id = Column(Integer,ForeignKey("school.id"))
stu2sch = relationship("School",backref="stu2sch") engine = create_engine("mysql+pymysql://root:614615@127.0.0.1:3306/led?charset=utf8") Base.metadata.create_all(engine)
2.增加数据
#curd_insert_ForeginKey.py #添加数据
from sqlalchemy.orm import sessionmaker
from create_table_ForeignKey import Student,School,String,Integer,engine Session = sessionmaker(engine)
db_session = Session() # 正向的添加数据 relationship版本
sch_obj = School(name="清华")
sch_obj.stu2sch = [Student(name="李志强"),Student(name="李二短")]
db_session.add(sch_obj)
db_session.commit()
db_session.close() #反向的添加数据 relationship版本
stu_obj = Student(name="龙龙",stu2sch=School(name="北大"))
db_session.add(stu_obj)
db_session.commit()
db_session.close()
3.修改操作
curd_update_ForeginKey.py from sqlalchemy.orm import sessionmaker
from create_table_ForeignKey import School,Student,String,Integer,engine Session = sessionmaker(engine)
db_session = Session() sch = db_session.query(School).filter(School.name == "清华").first()
# 查到学校的id,在学生表里查到学生是龙龙的学生把学校id改成察到的学校id
db_session.query(Student).filter(Student.name == "龙龙").update({"school_id":sch.id})
db_session.commit()
db_session.close()
4.查的操作
#curd_select_ForeginKey.py from sqlalchemy.orm import sessionmaker
from create_table_ForeignKey import School,Student,engine,String,Integer Session = sessionmaker(engine)
db_session = Session() #relationship正向查询版本
stu = db_session.query(Student).all()
for i in stu:
print(i.name,i.id,i.stu2sch.name) # relationship反向查询版本
sch = db_session.query(School).all()
for school in sch:
for student in school.stu2sch:
print(school.id,school.name,student.name)
5.delete
#curd_delete_ForeginKey.py from sqlalchemy.orm import sessionmaker
from create_table_ForeignKey import Student,School,String,Integer,engine Session = sessionmaker(engine)
db_session = Session() sch = db_session.query(School).filter(School.name == '北大').first()
print(sch.id)
db_session.query(Student).filter(Student.school_id == sch.id).delete()
db_session.commit()
db_session.close()
三。多对多表的操作
未完,待续
Flask中的的SQLAlchemy的更多相关文章
- Flask中的的SQLAlchemy2
昨天更新了博客不知对各位职场的大佬有没有帮助,如果没有看到的请用小手狠狠地戳这里 Flask中的的SQLAlchemy 今天呢,我们来说一下多对多表的关系,知道不?开始之前我先说一个事,昨晚更新了博客 ...
- flask 中的ORM
1 响应(response) 1 什么是响应 响应就是由服务器端带给客户端的内容,对应着请求,响应可以是普通的字符串,模板 或重定向 return '普通字符串' return render_temp ...
- Flask 中的 SQLAlchemy 使用教程
Flask 是一个 python web micro framework.所谓微框架,主要是 flask 简洁与轻巧,自定义程度高.相比 django 更加轻量级. 之前一直折腾 django,得益于 ...
- python web开发-flask中sqlalchemy的使用
SqlAlchemy是一个python的ORM框架. 在flask中有一个flask-sqlalchemy的扩展,使用起来很方便. 1. 创建一个sqlalchemy的Model模块 创建 ...
- flask 中orm关系映射 sqlalchemy的查询
flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课 ...
- flask框架----整合Flask中的目录结构
一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...
- Python框架学习之Flask中的数据库操作
数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...
- 整合Flask中的目录结构
一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...
- flask中如何生成迁移文件
在flask网站开发中,如果直接对数据库进行修改的话,风险比较高,最好的是由迁移文件生成,这样确保了数据的误操作. 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移.并且集成到Fl ...
随机推荐
- SQL之DCL
DCL(Data Control Language)数据库控制语言 授权,角色控制等GRANT 授权REVOKE 取消授权 1)授权命令 grant,语法格式(SQL语句不区分大小写):Grant ...
- SMS106 短信验证码接口测试
SMS106 短信验证码接口测试 一.什么是SMS106: 106短信通道是指仅中国移动.中国联通提供的网关短信平台,实现与客户指定号码进行短信批量发送和自定义发送的目的,即你收到的短信在手机上以1 ...
- 「CF140C」 New Year Snowmen
题目链接 戳这 贪心+优先队列,只要每次将数量前三大的半径拿出来就好了,用优先队列维护一下 #include<bits/stdc++.h> #define rg register #def ...
- string类------新标准c++程序设计
定义: string类是STL中basic_string模板实例化得到的模板类.其定义如下: typedef basic_string<char>string; 构造函数: string类 ...
- App Store提交审核报错 ERROR ITMS-90087解决办法
1.原因说明 app对Wifi进行配网, 使用了GizWifiSDK.framework提交App Store时候报错了 App Store Connect Operation Error ERROR ...
- NSValue 值
前言 将任意数据类型包装成 OC 对象 1.比较两个 NSValue 类型数据的大小 NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, ...
- Mybatis中的连接池
Mybatis中DataSource的存取 MyBatis是通过工厂模式来创建数据源DataSource对象的,MyBatis定义了抽象的工厂接口:org.apache.ibatis.datasour ...
- day8学python 各种简单模板
各种简单模板 内容: 1.shelve模板 存储数据 2.shutil 模板 用作拷贝/删除/压缩文件(使用便捷) 3.hashlib 模板 加密文件 4.re模板 ================= ...
- 模块-os.system的两个模块/random模块/datetime模块/写日志
一.获取当前目录的路径 os.path.abspath('.')# 取绝对路径 os.getcwd()# 取当前路径 .代表当前目录 ..上一级目录 ../.. 二.执行操作系统命令1.os.syst ...
- spring 学习(二):spring bean 管理--配置文件和注解混合使用
spring 学习(二)spring bean 管理--配置文件和注解混合使用 相似的,创建 maven 工程,配置pom.xml 文件,具体可以参考上一篇博文: sprint 学习(一) 然后我们在 ...