好久没有更新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. SQL之DCL

    DCL(Data Control Language)数据库控制语言  授权,角色控制等GRANT 授权REVOKE 取消授权 1)授权命令 grant,语法格式(SQL语句不区分大小写):Grant  ...

  2. SMS106 短信验证码接口测试

    SMS106  短信验证码接口测试 一.什么是SMS106: 106短信通道是指仅中国移动.中国联通提供的网关短信平台,实现与客户指定号码进行短信批量发送和自定义发送的目的,即你收到的短信在手机上以1 ...

  3. 「CF140C」 New Year Snowmen

    题目链接 戳这 贪心+优先队列,只要每次将数量前三大的半径拿出来就好了,用优先队列维护一下 #include<bits/stdc++.h> #define rg register #def ...

  4. string类------新标准c++程序设计

    定义: string类是STL中basic_string模板实例化得到的模板类.其定义如下: typedef basic_string<char>string; 构造函数: string类 ...

  5. App Store提交审核报错 ERROR ITMS-90087解决办法

    1.原因说明 app对Wifi进行配网, 使用了GizWifiSDK.framework提交App Store时候报错了 App Store Connect Operation Error ERROR ...

  6. NSValue 值

    前言 将任意数据类型包装成 OC 对象 1.比较两个 NSValue 类型数据的大小 NSValue *value1 = [NSValue valueWithPoint:NSMakePoint(10, ...

  7. Mybatis中的连接池

    Mybatis中DataSource的存取 MyBatis是通过工厂模式来创建数据源DataSource对象的,MyBatis定义了抽象的工厂接口:org.apache.ibatis.datasour ...

  8. day8学python 各种简单模板

    各种简单模板 内容: 1.shelve模板 存储数据 2.shutil 模板 用作拷贝/删除/压缩文件(使用便捷) 3.hashlib 模板 加密文件 4.re模板 ================= ...

  9. 模块-os.system的两个模块/random模块/datetime模块/写日志

    一.获取当前目录的路径 os.path.abspath('.')# 取绝对路径 os.getcwd()# 取当前路径 .代表当前目录 ..上一级目录 ../.. 二.执行操作系统命令1.os.syst ...

  10. spring 学习(二):spring bean 管理--配置文件和注解混合使用

    spring 学习(二)spring bean 管理--配置文件和注解混合使用 相似的,创建 maven 工程,配置pom.xml 文件,具体可以参考上一篇博文: sprint 学习(一) 然后我们在 ...