好久没有更新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的更多相关文章

  1. Flask中的的SQLAlchemy2

    昨天更新了博客不知对各位职场的大佬有没有帮助,如果没有看到的请用小手狠狠地戳这里 Flask中的的SQLAlchemy 今天呢,我们来说一下多对多表的关系,知道不?开始之前我先说一个事,昨晚更新了博客 ...

  2. flask 中的ORM

    1 响应(response) 1 什么是响应 响应就是由服务器端带给客户端的内容,对应着请求,响应可以是普通的字符串,模板 或重定向 return '普通字符串' return render_temp ...

  3. Flask 中的 SQLAlchemy 使用教程

    Flask 是一个 python web micro framework.所谓微框架,主要是 flask 简洁与轻巧,自定义程度高.相比 django 更加轻量级. 之前一直折腾 django,得益于 ...

  4. python web开发-flask中sqlalchemy的使用

    SqlAlchemy是一个python的ORM框架. 在flask中有一个flask-sqlalchemy的扩展,使用起来很方便. 1.       创建一个sqlalchemy的Model模块 创建 ...

  5. flask 中orm关系映射 sqlalchemy的查询

    flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询   一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课 ...

  6. flask框架----整合Flask中的目录结构

    一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...

  7. Python框架学习之Flask中的数据库操作

    数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类 ...

  8. 整合Flask中的目录结构

    一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import datetime from ...

  9. flask中如何生成迁移文件

    在flask网站开发中,如果直接对数据库进行修改的话,风险比较高,最好的是由迁移文件生成,这样确保了数据的误操作. 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移.并且集成到Fl ...

随机推荐

  1. GTA4下载和玩教程

    侠盗猎车4中文版.rar: 但是下载安装之后总是在刚开始开车的时候跳转到人物界面卡在那里无法进行下去,解决办法: 1.新建一个commandline.txt文件复制以下内容进去 -novblank - ...

  2. 分组背包----HDU1712 ACboy needs your help

    很简单的一道分组背包入门问题.不多解释了. #include <iostream> #include <cstdio> #include <cstring> usi ...

  3. ApplicationContex是干啥的

    ApplicationContext就是一个百宝箱 ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,Applic ...

  4. MVC - Model - Controller - View

    一. Model 1.1 在ASP.NET MVC 中 model 负责的是所有与 "数据“  相关的的任务. 也可以把Model 看成是 ASP.NET  中三层模式的 BLL层 加 DA ...

  5. android获取USB设备的名称

    1.注释内 .是三星设备可能不支持,需要更换的代码. 2.mUsbManager.是getSystemService(Context.USB_SERVICE)获的. 3. 从stackoverflow ...

  6. webapi put 请求405问题

    put 请求的时候  浏览器会像服务器发送两个请求 如何没做任何配置第一个options请求是会报错的 这是需要配置路由给options作响应 这时options请求就通过了,然后你们会看到你的put ...

  7. Vue vue-resource发送Http请求

    vue-resource 1.cnpm install vue-resource --save 2.在main.js中import VueResource from 'vue-resource' 3. ...

  8. .net core .NET Core与.NET Framework、Mono之间的关系

    .NET Core与.NET Framework.Mono之间的关系 首先想要知道.NET Core与.NET Framework.Mono之间的关系,就必须他们分别是什么,有什么用途? 一. .ne ...

  9. HTML4.0 需要掌握的主要内容

    常用标签: <html></html> 创建一个HTML文档 <head></head> 设置文档标题和其它在网页中不显示的信息 <title&g ...

  10. SpringBoot设置默认启动页的2种方式

    方式一: 继承WebMvcConfigurerAdapter,重写addViewControllers. @Configurationpublic class WebConfigurer extend ...