iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SQLAlchemy
  • 927
分享到

SQLAlchemy

SQLAlchemy 2023-01-31 08:01:40 927人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

首先安装包sudo pip3 install sqlalchemy 数据库的默认编码为 latin1,修改数据表的默认编码是 Mysql 的一个基本操作,这是需要预先掌握的。不过学习本课程时并不需要这么做,在创建数据库的同时添加 CHAR

首先安装包
sudo pip3 install sqlalchemy

数据库的默认编码为 latin1,修改数据表的默认编码是 Mysql 的一个基本操作,这是需要预先掌握的。不过学习本课程时并不需要这么做,在创建数据库的同时添加 CHARACTER SET = UTF8 指定编码格式即可。我们要创建课程相关的映射类以及对应的数据表,现在先创建所需数据库 study ,编码格式为 UTF-8 :

mysql -u root
create database study character set = UTF8;
show create database studyG

使用 SQLAlchemy 连接数据库需要引擎,创建引擎使用 create_engine 方法:

from sqlalchemy import create_engine

engine = create_engine('mysql://root@localhost/study?charset=utf8')
创建映射类需要继承声明基类,使用 declarative_base :

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(engine)

创建映射类须继承声明基类。首先创建 user 数据表的映射类,此表存放用户数据,也就是课程作者的数据:

from sqlalchemy import Column, Integer, String

class User(Base): # 继承声明基类

__tablename__ = 'user'  # 设置数据表名字,不可省略
id = Column(Integer, primary_key=True)   # 设置该字段为主键
# unique 设置唯一约束,nullable 设置非空约束
name = Column(String(64), unique=True, nullable=False)
email = Column(String(64), unique=True)

# 此特殊方法定义实例的打印样式
def __repr__(self):
    return '<User: {}>'.fORMat(self.name)

一对多关系
现在创建第二个映射类 Course,它对应的数据表 course 存放课程数据。一个课程作者可以创建多个课程,一个课程对应唯一的课程作者,这种关系被称为一对多或者多对一关系,这是最常用的数据表关系类型:

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref

class Course(Base):

__tablename__ = 'course'
id = Column(Integer, primary_key=True)
name = Column(String(64))
# ForeignKey 设置外键关联,第一个参数为字符串,user 为数据表名,id 为字段名
# 第二个参数 ondelete 设置删除 User 实例后对关联的 Course 实例的处理规则
# 'CASCADE' 表示级联删除,删除用户实例后,对应的课程实例也会被连带删除
user_id = Column(Integer, ForeignKey('user.id', ondelete='CASCADE'))
# relationship 设置查询接口,以便后期进行数据库查询操作
# 第一个参数为位置参数,参数值为外键关联的映射类名,数据类型为字符串
# 第二个参数 backref 设置反向查询接口
# backref 的第一个参数 'course' 为查询属性,User 实例使用该属性可以获得相关课程实例的列表
# backref 的第二个参数 cascade 如此设置即可实现 python 语句删除用户数据时级联删除课程数据
user = relationship('User', 
        backref=backref('course', cascade='all, delete-orphan'))

def __repr__(self):
    return '<Course: {}>'.format(self.name)
    
    

创建数据表
声明基类 Base 在创建之后并不会主动连接数据库,因为它的默认设置为惰性模式。Base 的 metadata 有个 create_all 方法,执行此方法会主动连接数据库并创建全部数据表,完成之后自动断开与数据库的连接:

Base.metadata.create_all()

完整代码
总结以上内容,写入 db.py 文件:

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref

engine = create_engine('mysql://root@localhost/study?charset=utf8')
Base = declarative_base(engine)

class User(Base):

__tablename__ = 'user'  
id = Column(Integer, primary_key=True) 
name = Column(String(64), unique=True, nullable=False)
email = Column(String(64), unique=True)

def __repr__(self):
    return '<User: {}>'.format(self.name)

class Course(Base):

__tablename__ = 'course'
id = Column(Integer, primary_key=True)
name = Column(String(64))
user_id = Column(Integer, ForeignKey('user.id', ondelete='CASCADE'))
user = relationship('User',
        backref=backref('course', cascade='all, delete-orphan'))

def __repr__(self):
    return '<Course: {}>'.format(self.name)

if name == '__main__':

# 使用声明基类的 metadata 对象的 create_all 方法创建数据表:
Base.metadata.create_all()

运行程序
在终端使用 Python 解释器运行文件,在此之前先安装一个必要的依赖包 mysqlclient,该依赖包的作用是连接数据库:

$ sudo pip3 install mysqlclient # 安装依赖包
$ python3 db.py

测试数据的创建需要用到 Python 的 faker 库,使用 pip3 安装先:

sudo pip3 install faker
这是一个用法简单功能强大的伪造数据的库,大家可以在命令行交互解释器 ipython 中进行测试,首先在终端命令行安装 ipython :

$ sudo pip3 install ipython

完成后终端执行 ipython 命令,即可进入命令行交互解释器:

In [38]: from faker import Faker # 引入 Faker 类

In [39]: fake = Faker('zh-cn')

In [40]: fake.name() # 伪造姓名
Out[40]: '房明'

In [41]: fake.address() # 伪造地址
Out[41]: '山西省梅市上街董路Q座 238175'

In [42]: fake.email() # 伪造邮箱
Out[42]: 'oqiu@rn.net'

In [43]: fake.url() # 伪造 URL
Out[43]: 'https://www.yuzhu.cn/'

In [44]: fake.date() # 伪造日期
Out[44]: '2012-07-03'

ession 处理数据
上文已经介绍了使用映射类创建数据表要用声明基类 Base,那么处理数据用什么呢?要用到 session,它是 sessionmaker 类的实例,该实例实现了 call 方法,本身可以作为函数来执行,返回值就是能够处理数据的 session:

from sqlalchemy.orm import sessionmaker

from db import Base, engine, User, Course

session = sessionmaker(engine)()
当我们创建了 session 实例,就启动了一个操作 MySQL 数据库的会话。

生成测试数据
接下来创建 5 个课程作者,也就是 5 个 User 类的实例,每个作者对应两个课程,共 10 个 Course 类实例。将以下代码写入测试数据的 Python 文件中,文件名为 create_data.py :

from sqlalchemy.orm import sessionmaker
from faker import Faker
from db import Base, engine, User, Course

session = sessionmaker(engine)()
fake = Faker('zh-cn')

def create_users():

for i in range(10):
    # 创建 10 个 User 类实例,伪造 name 和 email
    user = User(name=fake.name(), email=fake.email())
    # 将实例添加到 session 会话中,以备提交到数据库
    # 注意,此时的 user 对象没有 id 属性值
    # 映射类的主键字段默认从 1 开始自增,在传入 session 时自动添加该属性值
    session.add(user)

def create_courses():

# session 有个 query 方法用来查询数据,参数为映射类的类名
# all 方法表示查询全部,这里也可以省略不写
# user 就是上一个函数 create_users 中的 user 对象
for user in session.query(User).all():
    # 两次循环,对每个作者创建两个课程
    for i in range(2):
        # 创建课程实例,name 的值为 8 个随机汉字
        course = Course(name=''.join(fake.Words(4)), user_id=user.id)
        session.add(course)

def main():

# 执行两个创建实例的函数,session 会话内就有了这些实例
create_users()
create_courses()
# 执行 session 的 commit 方法将全部数据提交到对应的数据表中
session.commit()

if name == '__main__':

main()

完成后,可以在终端执行 python3 create_data.py 来创建数据。为了便于查看代码的执行情况,不这样做,我们在 ipython 中引入这些函数,依次执行它们来查看细节:

In [1]: from create_data import User, Course, session, create_users, create_courses

In [2]: create_users()

In [3]: session.query(User).all()
Out[3]:
[<User: 安颖>,
<User: 赵琴>,
<User: 李英>,
<User: 邢想>,
<User: 高玲>,
<User: 戴晶>,
<User: 卢建平>,
<User: 陈强>,
<User: 姜帆>,
<User: 包柳>]

In [4]: user = session.query(User).all()[3]

In [5]: user.name
Out[5]: '邢想'

In [6]: user.id
Out[6]: 4

In [7]: create_courses()

In [8]: for course in session.query(Course)[:4]:
...: print(course.name)
...:
开发中文电子新闻
怎么发布结果详细
你的只要非常如果
次数通过评论等级

In [9]: user.course
Out[9]: [<Course: 上海这么国际时候>, <Course: 对于技术两个你们>]

In [10]: course = session.query(Course)[12]

In [11]: course.user
Out[11]: <User: 卢建平>

In [12]: session.commit()

**接下来我们在 ipython 中删除 user 实例,验证级联删除功能是否生效:

In [13]: session.delete(user)

In [14]: session.commit()**

--结束END--

本文标题: SQLAlchemy

本文链接: https://www.lsjlt.com/news/193063.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • SQLAlchemy
    首先安装包sudo pip3 install sqlalchemy 数据库的默认编码为 latin1,修改数据表的默认编码是 MySQL 的一个基本操作,这是需要预先掌握的。不过学习本课程时并不需要这么做,在创建数据库的同时添加 CHAR...
    99+
    2023-01-31
    SQLAlchemy
  • Python 之 sqlalchemy删
    表结构: 代码: #Author Kang import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import d...
    99+
    2023-01-31
    Python sqlalchemy
  • SQLAlchemy Table(表)类
    Table 构造方法  1 Table(name, metadata[, *column_list][, **kwargs])  参数说明:  name 表名 metadata 元数据对象 column_list 是列(Colum...
    99+
    2023-01-30
    SQLAlchemy Table
  • Python工具之SQLAlchemy
    工具介绍:SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。工作方式:通过定义类的方式来操...
    99+
    2023-01-31
    工具 Python SQLAlchemy
  • Python 之 sqlalchemy查
    表结果: 查询代码: #Author Kang import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import...
    99+
    2023-01-31
    Python sqlalchemy
  • Python 之 sqlalchemy更
    表结构: 代码: #Author Kang import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import d...
    99+
    2023-01-31
    Python sqlalchemy
  • Flask SQLALchemy如何使用
    这篇文章主要介绍“Flask SQLALchemy如何使用”,在日常操作中,相信很多人在Flask SQLALchemy如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask SQLALchemy如...
    99+
    2023-07-02
  • Flask 系列之 SQLAlchemy
    SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了。 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv...
    99+
    2023-01-31
    系列之 Flask SQLAlchemy
  • Flask中SQLAlchemy怎么安装
    这篇文章主要介绍了Flask中SQLAlchemy怎么安装,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文教程操作环境:windows7系统、flask1.0,DELL G...
    99+
    2023-06-14
  • python学习笔记SQLAlchemy
    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类...
    99+
    2023-01-31
    学习笔记 python SQLAlchemy
  • Dataset中SQLAlchemy如何使用
    这篇文章给大家介绍Dataset中SQLAlchemy如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Dataset对于操作JSON、CSV文件、NoSQL非常好用。import...
    99+
    2024-04-02
  • Flask的Sqlalchemy怎么使用
    本篇内容主要讲解“Flask的Sqlalchemy怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flask的Sqlalchemy怎么使用”吧!一: 基本使用:1:环境的安装:pip&nb...
    99+
    2023-07-02
  • Pandas告警UserWarning: pandas only supports SQLAlchemy connectable
    Pandas告警UserWarning: pandas only supports SQLAlchemy connectable 一、报错信息二、老的书写方式三、新的书写方式 一、报错信息...
    99+
    2023-09-04
    pandas python 数据挖掘 开发语言 数据库
  • flask SQLAlchemy怎么连接数据库
    这篇文章主要介绍了flask SQLAlchemy怎么连接数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇flask SQLAlchemy怎么连接数据库文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • python中SQLAlchemy的作用是什么
    python中SQLAlchemy的作用是什么?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python...
    99+
    2023-06-14
  • SQLAlchemy使用教程(以SQLite为例)
     安装依赖 pip3 install sqlalchemy==1.4.46 pip install sqlacodegen 如果是mysql则多安装一个依赖 pip3 install pymysql 在项目中新建一个db文件夹(后来:推...
    99+
    2023-09-04
    python mysql 开发语言
  • Flask-SQLALchemy基本使用方法
    目录数据库基本操作将数据添加到会话中示例:在视图函数中定义模型类常用的SQLAlchemy查询过滤器常用的SQLAlchemy查询执行器创建表:删除表插入一条数据一次插入多条数据查询...
    99+
    2024-04-02
  • 怎么在Python中使用sqlalchemy库
    这期内容当中小编将会给大家带来有关怎么在Python中使用sqlalchemy库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和...
    99+
    2023-06-14
  • Python中sqlalchemy框架如何使用
    今天就跟大家聊聊有关Python中sqlalchemy框架如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。安装安装#进入虚拟环境#执行./python3 -m&nbs...
    99+
    2023-06-20
  • Python的Flask Blueprint SQLAlchemy怎么应用
    这篇文章主要讲解了“Python的Flask Blueprint SQLAlchemy怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的Flask&nb...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作