建立 ORM 研讨会

建立 orm 研讨会

sql 是用于管理数据库的最常用编程语言,由于其稳健性和简单性而在许多大公司中使用。但是如果我们想将它集成到一个更大、更通用的程序中怎么办?这就是对象关系管理器发挥作用的地方!在这篇文章中,我将讨论并展示一些使用 sqlite3 与 sql 数据库通信的基础知识的示例。大部分工作将在专业环境中通过 sqalchemy 等标准化 orm 完成,但了解幕后发生的事情是有好处的。

在开始与数据库对话之前,我们需要将 sqlite3 导入到我们的 python 文件中。

import sqlite3

导入后,我们设置了与数据库的连接以及与之交互的游标。并不是说,如果您尝试连接的文件不存在,此行将在连接之前创建它。

conn = sqlite3.connect('pets.db')cursor = conn.cursor()

为了在 python 中跟踪数据库信息,我们将创建一个与数据库表中包含的信息相对应的类。对于我们的示例,我们将创建一个宠物数据库供用户跟踪。

class pet:    all = {}    def __init__(self, name, species, id=none):        self.id = id        self.name = name        self.species = species

在此示例中,id、name 和species 是表中的列,该类的每个实例都是一行。我们将使用字典类属性 all 来存储数据库中行的各个实例,这样我们就不必每次引用它们时都从数据库中提取它们。我们将在初始化时将 id 保留为 none,因为它将在我们为对象创建实际数据库条目后分配。

现在我们的框架开始组合在一起,让我们看一些通过我们的类运行 sql 代码来构建和操作数据库的示例。在我们做任何事情之前,我们需要创建一个表。语法与 sql 本身几乎相同,但作为特殊字符串传递给我们的 cursor 以在我们的数据库上运行。

    @classmethod    def create_table(cls):        sql = """            create table if not exists pets (            id integer primary key,            name text,            species text)        """        cursor.execute(sql)        conn.commit()

接下来我们需要能够将信息添加到我们的数据库中。毕竟,没有信息可组织的数据库表算什么?我们将使用类方法“create”来创建实例,并使用实例方法“save”将自身保存到数据库和类中。

    @classmethod    def create(cls, name, species):        pet = cls(name, species)        pet.save()        return pet    def save(self):        sql = """            insert into pets (name, species)            values (?, ?)        """        cursor.execute(sql, (self.name, self.species))        conn.commit()        self.id = cursor.lastrowid        type(self).all[self.id] = self

注意我们写的是“?”符号而不是我们想要在 sql 代码中使用的实际值。 cursor.execute 函数可以识别这些,并将按顺序用我们传递给它的值替换它们。在本例中,为 self.name 和 self.species。然后我们从数据库中获取新插入行的 id,并将其用作实例的 python 字典的键。

现在我们已经掌握了为数据库创建信息的基础知识,我们可以编写一个简短的测试脚本来演示。

from pet import petdef seed_database():    pet.create_table()    fido = pet.create("fido", "dog")    print(fido)seed_database()

这会在控制台打印什么?


我们至少要创建一个对象,让我们更新 pet 类来覆盖基本的打印功能,我们可以使用特殊函数 ‘repr‘ 来做到这一点。

    def __repr__(self):        return f""

该函数获取类的实例并返回一个格式化字符串以轻松显示我们的信息。


这表明它正在工作,但是仅使用 python 对象没有什么是做不到的。数据库的明显优点是它被保存到一个单独的文件中,因此您的数据在程序执行之间保持不变。让我们将其分成一个简单的脚本来为数据库播种,以及一个将其打印出来进行演示的脚本。当我们这样做时,我们将向 pet 类添加更多功能。

import sqlite3conn = sqlite3.connect('database.db')cursor = conn.cursor()class pet:    # dictionary of objects saved to the database.    all = {}    def __init__(self, name, species, id=none):        self.id = id        self.name = name        self.species = species    def __repr__(self):        return f""    @classmethod    def create_table(cls):        """ create a new table to persist the attributes of animal instances """        sql = """            create table if not exists pets (            id integer primary key,            name text,            species text)        """        cursor.execute(sql)        conn.commit()    @classmethod    def drop_table(cls):        sql = """            drop table if exists pets;        """        cursor.execute(sql)        conn.commit()    @classmethod    def create(cls, name, species):        """ initialize a new pet instance and save the object to the database """        pet = cls(name, species)        pet.save()        return pet    def save(self):        sql = """            insert into pets (name, species)            values (?, ?)        """        cursor.execute(sql, (self.name, self.species))        conn.commit()        self.id = cursor.lastrowid        type(self).all[self.id] = self    def update(self):        sql = """            update pets            set name = ?, location = ?            where id = ?        """        cursor.execute(sql, (self.name, self.location, self.id))        conn.commit()    def delete(self):        sql = """            delete from pets            where id = ?        """        cursor.execute(sql, (self.id,))        conn.commit()        # delete the dictionary entry using id as the key        del type(self).all[self.id]        # set the id to none        self.id = none    @classmethod    def get_all(cls):        sql = """            select *            from pets        """        rows = cursor.execute(sql).fetchall()        return [cls.instance_from_db(row) for row in rows]

我们的种子脚本:

from pet import petdef seed_database():    pet.drop_table()    pet.create_table()    fido = pet.create("fido", "dog")    lucy = pet.create("lucy", "turtle")    borris = pet.create("borris", "goldfish")seed_database()

我们的最终测试脚本会向数据库添加一个条目并显示其内容。

from pet import petdef add_and_display():    pet.create("bob", "chicken")    for pet in pet.get_all():         print(pet)add_and_display()

现在,如果我们想重置数据库并给它一些初始值,我们只需运行:

$ python lib/seed.py

我们可以通过运行看到它持续存在:

$ python lib/display.py


每次运行显示脚本时,它都会向表中添加另一个 bob!


这远不是一个好的 orm 的全部内容,但它是一个很好的框架,可以帮助您了解标准化对象关系管理器的底层情况。

以上就是建立 ORM 研讨会的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1347998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 11:39:41
下一篇 2025年12月12日 13:21:28

相关推荐

  • 使用 Selenium 和视觉比较进行视觉回归测试

    视觉测试对于确保 web 应用程序的外观在更新或更改后保持一致和视觉正确至关重要。本博客将指导您使用 selenium 进行浏览器自动化,并使用自定义图像比较实用程序来执行视觉测试。 简介 视觉测试通过比较不同时间点拍摄的屏幕截图来帮助检测 ui 中的意外变化。在本指南中,我们将使用 seleniu…

    2025年12月13日
    000
  • 使用 Python 构建 Tic-Tac-Toe 终端游戏

    介绍 我叫 Derek,是一名有抱负的软件工程师!最近,我一直在努力通过在线课程学习 Python 和软件开发的基础知识。两年前大学毕业,获得商业计算和信息系统学士学位,对软件开发流程比较熟悉,并具备一定的IT技能;但在编程和解决问题方面,我在技术方面还有很多东西需要学习。因此,我决定参加上述课程,…

    2025年12月13日
    000
  • Magic and Muscle:使用 Magic 和 DuckDB 进行 ETL,其中包含我的举重训练数据

    您可以在这里访问完整的管道 法师 在我的上一篇文章中,我写了一个使用 python 和 looker studio 构建的仪表板,用于可视化我的举重训练数据。在这篇文章中,我将使用相同的数据集逐步引导您完成 etl(提取、转换、加载)管道。 为了构建管道,我们将使用 mage 来编排管道,并使用 p…

    2025年12月13日
    000
  • Python 中的类(简介)

    在python中,类是面向对象编程的基础。简单来说,它们本质上是用于创建具有相似属性的对象的模板。 创建类 类定义语法非常简单。您所需要的只是关键字:class 后跟 classname:(类名始终采用大驼峰式命名)。我在下面提供了一个例子:班级商店:干得好,您已经成功创建了一个班级!现在我们将更深…

    2025年12月13日
    000
  • python安装教程

    python怎么安装?这是不少网友都关注的问题,接下来由php小编为大家带来python详细安装教程,感兴趣的网友一起随小编来瞧瞧吧! python详细安装教程 1、为了安装Python,请访问其官方网站下载最新版本,Windows用户需要选择与自身系统匹配的安装程序,32位或64位。 2、运行安装…

    2025年12月13日
    000
  • update在python用法

    Python 中的 update() 方法用于更新字典或映射类型,通过合并另一个字典或 key-value 对来更新原有映射,覆盖已存在的键的值。它支持使用字典或关键字参数更新,可合并 Counter 对象并更新其他映射类型,但注意会直接修改原有映射。 update() 方法在 Python 中的用…

    2025年12月13日
    000
  • Pycharm搭建Django项目详细教程

    教程概述:本教程指导如何在 PyCharm 中搭建 Django 项目,涉及以下步骤:安装必要软件(Python、Django、PyCharm)打开 PyCharm 并新建 Django 项目配置 Django 设置(DEBUG、ALLOWED_HOSTS、DATABASES)创建 Django 应…

    2025年12月13日
    000
  • 使用 Python 和 DeepL 轻松进行本地化

    今天,我正在做一个项目,需要找到一种方法来本地化一些 JSON 文件。我的第二语言是英语,并且有一些参与本地化项目的经验,因此将这些文件从西班牙语本地化为英语不会有任何问题,但是当有很多字符串需要翻译时,如何优化流程?使用 DeepL API 并专注于验证翻译是否正确。 深L 在使用 DeepL A…

    2025年12月13日
    000
  • 我的生活中的Python

    嗨…我很高兴在在线学习搜索中发现了本教程。第一天培训的开场和介绍进行得很顺利。但我认为,你提到的重要网站的新闻可以作为参考书,让大家在培训期结束前查看并受益。因为并不是每个参加课程的人都具备完整的软件技能。多学科人士。每个人都想记住训练日的消息并接受训练。我就是其中之一… 以…

    2025年12月13日
    000
  • VS Code 于 6 月 4 日进行了令人难以置信的更新)

    VS Code 1.91 版本现已发布,并有一些令人难以置信的更新: 您现在可以安装特定版本的扩展,而无需下载最新版本。如果较新版本存在问题或者团队中的每个人都运行特定版本的扩展,这非常有用。如果您不喜欢主题的颜色或边框,请覆盖它。您可以将其设置回“默认”。包含 TypeScript 5.5。它支持…

    2025年12月13日
    000
  • 设置 Python 虚拟环境 (venv)

    Python 虚拟环境是管理项目依赖关系的好方法。它们允许您创建隔离的环境,您可以在其中安装特定于项目的包,而不会影响系统范围的 Python 安装。这篇博文将指导您使用 venv 设置 Python 虚拟环境。 分步指南 安装Python 首先,确保您的系统上安装了Python。大多数现代 Lin…

    2025年12月13日
    000
  • 创建 MSP 哥伦布网站:挑战、技术和未来目标

    创建 MSP 哥伦布网站是一项战略努力,旨在建立强大的在线形象,更好地为俄亥俄州哥伦布及其他地区的客户提供服务。本文深入探讨了我们在开发过程中遇到的挑战、所使用的技术以及我们对 MSP 哥伦布网站未来的期望。 面临的挑战开发 MSP 哥伦布网站遇到了一些挑战,需要精心规划和执行才能克服。主要挑战之一…

    2025年12月13日
    000
  • Kaniyam 的 Python 入门课程

    Python简介及其用法如何在 Windows、Linux 和 MacOS 中安装 python如何提出问题使用谷歌搜索连接在线论坛 – https://forums.tamillinuxcommunity.org/班级聊天 – Whatsapp 频道/班级频道如何查看pyt…

    2025年12月13日
    000
  • 你好世界

    今天,我参加了 Kaniyam 基金会提供的免费 Python 在线课程。而且,这个博客是为了记录我在整个课程中的进步。 今晚的第一场直播,分享了很多课程细节。提供了有关在我们的计算机上安装 Python 的有用信息。按照惯例,我们首先学习打印“Hello, World!”使用打印语句。在会议结束时…

    2025年12月13日
    000
  • 我的Python简介

    朋友们大家好, 我不是任何类型的计算机极客。但我长期以来一直对网页设计感兴趣。我通过互联网网站学习了一些知识。通过这些我学习了一些关于计算机编程语言的基础知识并熟悉了它。 此外,我目前正在参与股票市场交易,并考虑开发一些自动化系统。我还了解到 Python 可以帮助解决这个问题。 之后我开始学习如何…

    2025年12月13日
    000
  • python中list2什么意思

    在 Python 中,list2 表示列表的第二个元素。list2 等效于 my_list[1],其中 my_list 是列表。使用 list2 可以访问列表中指定索引的元素。 Python 中的 list2 含义 回答:list2 在 Python 中表示一个列表的第二个元素。 详细解释: 在 P…

    2025年12月13日
    000
  • python中出现raise异常如何解决

    python 中 raise 异常的解决方法 Python 中的 raise 语句用于主动引发异常。当代码中出现问题时,可以主动引发异常以终止程序或告知用户错误。 解决方法: 要解决 raise 异常,必须执行以下步骤: 理解错误消息:了解 raise 异常引发的确切错误消息,以便查明根本原因。检查…

    好文分享 2025年12月13日
    000
  • pycharm怎么导入numpy模块

    导入 NumPy 模块的步骤:使用 import numpy as np 语句import:导入模块numpy:NumPy 模块名称as np:分配别名(可选) 如何导入 NumPy 模块 导入 NumPy 模块 导入 NumPy 模块的步骤非常简单,只需使用以下语句: import numpy a…

    2025年12月13日
    000
  • pycharm怎么配置解释器

    PyCharm解释器的配置过程如下:安装Python解释器,推荐使用Python 3.x版本。打开PyCharm并新建一个项目。设置项目解释器,选择已安装的Python解释器。将添加的解释器设为默认解释器。 PyCharm 配置解释器 配置 PyCharm 解释器对于 Python 开发至关重要。通…

    2025年12月13日
    000
  • python import os什么意思

    Python 中 import os 的含义:导入 os 模块,提供操作系统相关功能。将 os 模块加载到解释器中,创建模块对象并将其添加到作用域中。启用访问 os 模块中定义的功能和常量,例如创建文件、执行命令等。 Python 中 import os 的含义 在 Python 中,import …

    2025年12月13日
    000

发表回复

登录后才能评论
关注微信