我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQLALchemy操作MySQL关系型数据库

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQLALchemy操作MySQL关系型数据库

1.SQLALchemy使用
  • 安装
pip install sqlalchemy;
  • SQLAlchemy是Python编程语言下的一款开源软件,是PythonSQL工具包和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性
2.什么是ORM
  • ORM(Object Relational Mapper)就是把数据库表的行与相应的对象建立关联,互相转换;

  • 目前,最知名的Python ORM是SQLAlchemy和SQLobject;

3.数据库操作
  • 创建表使用create_all()方法,删除表使用drop_all()方法,我们一起来看一下如何创建和删除表
# 导入引擎模块from sqlalchemy import create_engine# 导入基类模块from sqlalchemy.ext.declarative import declarative_base# 导入字段类from sqlalchemy import Column, Integer, String# 导入会话模块from sqlalchemy.orm import sessionmaker# 实体类的基类Base = declarative_base()# 实体类class Teacher(Base):    '''    实体类的创建有两个方面的用处:    1:如果数据库中没有表,那么可以使用实体类创建    2:如果数据库中有表,实体类可以映射表的结构,对表的CRUD操作    '''    # 表名必须指定    __tablename__ = 'teacher'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(255))    age = Column(Integer)    # 打印实例的使用可以发现,数据也是保存在实体类实例的__dict__中    def __repr__(self):        # print(self.__dict__)        return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)    __str__ = __repr__# 创建连接引擎host = 'localhost'port = 3306username = 'zengzeng'password = '123456'db = 'XKD_Python_Course'connect_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db)engine = create_engine(connect_str, echo=True)# 创建表Base.metadata.create_all(engine)# 删除表# Base.metadata.drop_all(engine)

我们现在命令工具中查看一下数据库中有没有我们想要的teacher表,上一篇文章中讲过,先登录mysql:mysql -uzengzeng -p123456,然后进入我们要使用的数据库:use XKD_Python_Course,我们先通过:show tables;查看一下数据库中的表,发现没有teacher表
那现在就可以执行代码,创建数据库了,创建好后我们可以在命令行查看一下:show tables;,发现teacher表已经存在了,创建表成功yes!

SQLALchemy操作MySQL关系型数据库

想要删除刚刚创建的表,可以使用drop_all()方法,执行代码,再查看数据库表,就可以看teacher表已经被删除了

Base.metadata.drop_all(engine)
  • 插入数据使用session.add_all()方法;
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerBase = declarative_base()class Teacher(Base):    __tablename__ = 'teacher'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(255))    age = Column(Integer)    def __repr__(self):        # print(self.__dict__)        return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)    __str__ = __repr__host = 'localhost'port = 3306username = 'zengzeng'password = '123456'db = 'XKD_Python_Course'connect_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db)engine = create_engine(connect_str, echo=True)# 创建会话,用于提交数据Session = sessionmaker(bind=engine)session = Session()# 创建多行行实例,给表添加数据try:    lst = []    for i in range(10):        teacher = Teacher()        teacher.name = 'zengzeng' + str(i)        teacher.age = 20 + i        lst.append(teacher)        print(teacher)    # session.add(student) 可以添加一行记录,也可以添加多行记录    # 注意:这里将行记录实例添加到session,不会提交,需要手动提交    session.add_all(lst)except Exception as e:    print('~~~~~~~~~~~'*200)    session.rollback()    print(e)finally:    session.commit()

我们执行代码,然后去命令工具查看一下表是否插入数据:select * from teacher;

SQLALchemy操作MySQL关系型数据库

  • 查询操作使用session.query()方法,迭代查询;
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerBase = declarative_base()class Teacher(Base):    __tablename__ = 'teacher'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(255))    age = Column(Integer)    def __repr__(self):        # print(self.__dict__)        return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)    __str__ = __repr__host = 'localhost'port = 3306username = 'zengzeng'password = '123456'db = 'XKD_Python_Course'conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db)engine = create_engine(conn_str, echo=False)Session = sessionmaker(bind=engine)session = Session()teacher_obj = session.query(Teacher)for teacher in  teacher_obj:    print(teacher) # 返回结果:{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x1063125f8>, 'age': 20, 'name': 'nihao0', 'id': 1}print('*'*300)# 直接返回实例对象teacher = session.query(Teacher).get(4)print(teacher) # 返回结果:{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x1075fd400>, 'age': 23, 'name': 'nihao3', 'id': 4}print(teacher.id)  # 返回 aobamaprint(teacher.name)print(teacher.age)print('*'*300)# 返回的是可迭代对象teacher_results = session.query(Teacher).filter(Teacher.id == 5)for teacher in teacher_results:  # 拿到student实例对象    print(teacher)
  • 修改操作:session.update()
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerBase = declarative_base()class Teacher(Base):    __tablename__ = 'teacher'    id = Column(Integer, primary_key=True, autoincrement=True)    name = Column(String(255))    age = Column(Integer)    def __repr__(self):        # print(self.__dict__)        return "id='%s', name='%s', age='%s" % (self.id, self.name, self.age)    __str__ = __repr__# 创建连接引擎host = 'localhost'port = 3306username = 'zengzeng'password = '123456'db = 'XKD_Python_Course'conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db)engine = create_engine(conn_str, echo=False)# 创建会话,用于提交数据Session = sessionmaker(bind=engine)session = Session()teacher = session.query(Teacher).get(4)teacher.name = 'Robby'teacher.age = '99'session.commit()
where条件查询
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String, DATE, Enum, ForeignKeyimport enumfrom sqlalchemy.orm import sessionmakerBase = declarative_base()class My_Enum(enum.Enum):    M = 'M'    F = 'F'# 实体类class Emploee(Base):    '''    +------------+---------------+------+-----+---------+-------+    | Field      | Type          | Null | Key | Default | Extra |    +------------+---------------+------+-----+---------+-------+    | emp_no     | int(11)       | NO   | PRI | NULL    |       |    | birth_date | date          | NO   |     | NULL    |       |    | first_name | varchar(14)   | NO   |     | NULL    |       |    | last_name  | varchar(16)   | NO   |     | NULL    |       |    | gender     | enum('M','F') | NO   |     | NULL    |       |    | hire_date  | date          | NO   |     | NULL    |       |    +------------+---------------+------+-----+---------+-------+    '''    __tablename__ = 'employees'    emp_no = Column(Integer, primary_key=True, nullable=False)    birth_date = Column(DATE, nullable=False)    first_name = Column(String(14), nullable=False)    last_name = Column(String(16),nullable=False)    gender = Column(Enum(My_Enum), nullable=False)    hire_date = Column(DATE, nullable=False)    def __repr__(self):        return "emp_no='%s', birth_date='%s', first_name='%s', last_name='%s', gender='%s', hire_date='%s'" % (self.emp_no, self.birth_date, self.first_name, self.last_name, self.gender, self.hire_date)    __str__ = __repr__# 创建连接引擎host = 'localhost'port = 3306username = 'zengzeng'password = '123456'db = 'XKD_Python_Course'conn_str = 'mysql+mysqldb://{}:{}@{}:{}/{}'.format(username, password, host, port,db)engine = create_engine(conn_str, echo=False)# 创建表Base.metadata.create_all(engine)# 创建会话,用于提交数据Session = sessionmaker(bind=engine)session = Session()# # 简单的where条件查询过滤, 返回可迭代对象, AND 取与emploees = session.query(Emploee).filter(Emploee.emp_no < 10010).filter(Emploee.gender == 'M')emploees = session.query(Emploee).filter((Emploee.emp_no > 10010) & (Emploee.gender == 'F'))# OR 取并emploees = session.query(Emploee).filter((Emploee.emp_no > 10010) | (Emploee.gender == 'F'))# NOT 取反emploees = session.query(Emploee).filter(~(Emploee.emp_no > 10010))# inemploees = session.query(Emploee).filter(Emploee.emp_no.in_([10010, 10011, 10012]))# not inemploees = session.query(Emploee).filter(~Emploee.emp_no.in_([10010, 10011, 10012]))# like ,like可以忽略大小写进行模式匹配emploees = session.query(Emploee).filter(Emploee.last_name.like('B%'))for emploee in emploees:    print(emploee)
order排序
  • asc():升序;
例如:emploees = session.query(Emploee).filter(Emploee.last_name.like('B%')).order_by(Emploee.emp_no.asc())
  • desc():降序;
例如:emploees=session.query(Emploee).filter(Emploee.last_name.like('B%')).order_by(Emploee.emp_no.desc())
  • 多字段排序:在语句里面进行多次排序;
聚合与分组
  • list():转化为列表;

  • count():聚合count(*)查询;

  • all(): 转化为列表;

  • limit().one():查询首行;

    emploees = session.query(Emploee)print(list(emploees))         # 转化为列表print(emploees.count())     # 聚合count(*)查询print(emploees.all())        # 转化为列表print(emploees.limit(1).one())    # 查询首行
  • max():返回最大值;

  • min():返回最小值;

  • avg():返回平均值;

    emploees = session.query(func.max(Emploee.emp_no))emploees = session.query(func.min(Emploee.emp_no))emploees = session.query(func.avg(Emploee.emp_no))
  • group_by():分组查询;

emploees = session.query(func.count(Emploee.emp_no)).group_by(Emploee.gender)print(emploees)for emploee in emploees:    print(emploee)

参考:https://www.9xkd.com/user/plan-view.html?id=2415909403

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQLALchemy操作MySQL关系型数据库

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQLALchemy操作MySQL关系型数据库

1.SQLALchemy使用安装pip install sqlalchemy;SQLAlchemy是Python编程语言下的一款开源软件,是PythonSQL工具包和对象关系映射器,它为应用程序开发人员提供了SQL的全部功能和灵活性2.什么
2023-06-02

mysql client如何操作MySQL关系型数据库

这篇文章主要介绍了mysql client如何操作MySQL关系型数据库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。主要讲解mysqlclient操作MySQL关系型数据库
2023-06-02

Python使用SQLAlchemy操作Mysql数据库的操作示例

目录一、SQLAlchemy 介绍二、使用步骤(示例)1. 安装所需的库2. 连接到mysql数据库3. 定义模型4. 创建表5. 添加数据6. 查询数据三、结合事务使用(示例)1. 定义模型2. 初始化数据库连接和会话3. 使用事务添加用
Python使用SQLAlchemy操作Mysql数据库的操作示例
2024-08-09

数据库:关系型数据库和非关系型数据库

数据库是数据的结构化集合,可分为关系型数据库和非关系型数据库关系型数据库更适合处理结构化数据;表与表之间有很复杂的关联关系。大都遵循 SQL (结构化查询语言,Structured Query Language)标准。常见的关系型数据库管理系统(DBMS) 有
数据库:关系型数据库和非关系型数据库
2015-08-25

关系型数据库与非关系型数据库

关系型数据库:  1、定义:    创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据  2、关系模型常用概念:    (1)关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名    (2)元组:可以理解为二维
2019-09-16

python中怎么利用sqlalchemy 操作数据库

今天就跟大家聊聊有关python中怎么利用sqlalchemy 操作数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.安装pip install sqlalchemy2.代码如
2023-06-02

mysql是关系型数据库吗?

是,mysql 是一种关系型数据库管理系统(rdbms),它使用关系模型来存储和管理数据,包括:表,其中行表示数据实体,列表示属性。主键,唯一标识每个行。外键,用于建立表之间的关系。数据完整性约束,如主键和外键约束,以确保数据准确性和一致性
mysql是关系型数据库吗?
2024-08-02

mysql是关系型数据库吗

是的,MySQL 是一种关系型数据库管理系统(RDBMS)。关系型数据库是指采用了关系模型来组织数据的数据库系统。在一个关系型数据库中,数据以表格的形式进行存储,每个表由行和列组成,其中每一列代表一个属性,每一行代表一个记录。MySQL
mysql是关系型数据库吗
2024-04-09

关系型数据库

关系型数据库(RDBMS)是一种以表格形式存储和组织数据的系统。其遵循关系模型,确保数据完整性、高效组织和易于操作。RDBMS适用于需要结构化数据、数据完整性、高并发性和OLTP的应用程序。常见的RDBMS包括MySQL、PostgreSQL和Oracle。尽管NoSQL数据库的兴起,但RDBMS的基本原则仍然是数据管理的基石。
关系型数据库
2024-04-02

mysql属于关系型数据库吗

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策
2022-05-20

nodejs中关于mysql数据库的操作

这篇文章主要介绍了nodejs中关于mysql数据库的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

编程热搜

目录