📝 SQLAlchemy教程
72篇技术文档📅  最后修改于: 2020-11-27 07:39:03        🧑  作者: Mango
在本章中,我们将研究“多表删除”表达式,该表达式类似于使用“多表更新”函数。许多DBMS方言中的DELETE语句的WHERE子句中可以引用多个表。对于PG和MySQL,使用“ DELETE USING”语法。对于SQL Server,使用“ DELETE FROM”表达式表示多个表。通过在WHERE子句中指定多个表,SQLAlchemydelete()构造可隐式支持这两种模式-在PostgreSQ...
📅  最后修改于: 2020-11-27 07:39:34        🧑  作者: Mango
在本章中,我们将学习如何在SQLAlchemy中使用Joins。只需将两个表放在select()构造的column子句或where子句中即可达到连接的效果。现在,我们使用join()和externaljoin()方法。join()方法将一个连接对象从一个表对象返回到另一个表对象。上面代码中提到的参数的功能如下-右-连接的右侧;这是任何表对象onclause-表示联接的ON子句的SQL表达式。如果保...
📅  最后修改于: 2020-11-27 07:40:19        🧑  作者: Mango
联结是SQLAlchemy模块中的函数,这些函数实现SQL表达式的WHERE子句中使用的关系运算符。运算符AND,OR,NOT等用于形成组合两个单独的逻辑表达式的复合表达式。在SELECT语句中使用AND的简单示例如下-SQLAlchemy函数and _(),or_()和not_()分别实现AND,OR和NOT运算符。and_()函数它产生由AND连接的表达式的合取。为了更好的理解下面给出一个例子...
📅  最后修改于: 2020-11-27 07:40:50        🧑  作者: Mango
本章讨论了SQLAlchemy中使用的一些重要功能。标准SQL推荐了许多由大多数方言实现的功能。它们根据传递给它的参数返回一个值。一些SQL函数将列作为参数,而另一些则是通用的。SQLAlchemy API中的thefunc关键字用于生成这些函数。在SQL中,now()是泛型函数。以下语句使用func渲染now()函数-以上代码的示例结果可能如下所示-另一方面,count()函数返回从表中选择的行...
📅  最后修改于: 2020-11-27 07:41:32        🧑  作者: Mango
在上一章中,我们了解了各种函数,例如max(),min(),count()等,在这里,我们将了解集合操作及其用法。标准SQL及其大多数方言支持诸如UNION和INTERSECT之类的集合操作。 SQLAlchemy通过以下功能实现它们-联盟()在合并两个或多个SELECT语句的结果时,UNION消除了结果集中的重复项。两个表中的列数和数据类型必须相同。union()函数从多个表中返回Compoun...
📅  最后修改于: 2020-11-27 07:42:19        🧑  作者: Mango
SQLAlchemy的对象关系映射器API的主要目标是促进将用户定义的Python类与数据库表相关联,并将这些类的对象与它们对应的表中的行相关联。对象和行的状态变化彼此同步匹配。 SQLAlchemy允许根据用户定义的类及其定义的关系来表达数据库查询。ORM是在SQL表达式语言之上构建的。这是一种高级抽象用法。实际上,ORM是表达式语言的一种应用用法。尽管可以仅使用对象关系映射器来构建成功的应用程...
📅  最后修改于: 2020-11-27 07:42:43        🧑  作者: Mango
为了与数据库进行交互,我们需要获取其句柄。会话对象是数据库的句柄。会话类是使用sessionmaker()定义的-一种可配置的会话工厂方法,该方法绑定到之前创建的引擎对象。然后使用其默认构造函数设置会话对象,如下所示:下面列出了一些常见的会话类方法-Sr.No.Method & Description1begin()begins a transaction on this session2add(...
📅  最后修改于: 2020-11-27 07:43:27        🧑  作者: Mango
在SQLAlchemy ORM的前几章中,我们学习了如何声明映射和创建会话。在本章中,我们将学习如何向表中添加对象。我们声明了已映射到客户表的客户类。我们必须声明一个此类的对象,并通过会话对象的add()方法将其持久地添加到表中。请注意,此事务将挂起,直到使用commit()方法刷新该事务为止。以下是在客户表中添加记录的完整脚本-要添加多个记录,我们可以使用会话类的add_all()方法。SQLi...
📅  最后修改于: 2020-11-27 07:44:49        🧑  作者: Mango
SQLAlchemy ORM生成的所有SELECT语句均由Query对象构造。它提供了一个生成接口,因此,后续调用将返回一个新的Query对象,该对象是前者的副本,并带有其他条件和与之相关的选项。最初使用Session的query()方法生成查询对象,如下所示:以下语句也等同于上述给定语句-查询对象具有all()方法,该方法以对象列表的形式返回结果集。如果我们在客户表上执行它-该语句实际上等效于以...
📅  最后修改于: 2020-11-27 07:45:42        🧑  作者: Mango
在本章中,我们将看到如何用所需的值修改或更新表。要修改任何对象的某个属性的数据,我们必须为其分配新值并提交更改以使更改持久化。让我们从ID为2的客户表中的主键标识符表中获取一个对象。我们可以使用session的get()方法,如下所示:我们可以使用以下给定的代码显示所选对象的内容-从我们的客户表中,应显示以下输出:现在我们需要通过分配新值来更新“地址”字段,如下所示-更改将永久反映在数据库中。现在...
📅  最后修改于: 2020-11-27 07:46:07        🧑  作者: Mango
在本章中,我们将讨论如何应用过滤器以及某些过滤器操作及其代码。通过使用filter()方法,可以将Query对象表示的结果集置于某些条件下。过滤方法的一般用法如下-在以下示例中,按条件(ID> 2)过滤通过Customer表上的SELECT查询获得的结果集-该语句将转换为以下SQL表达式-由于绑定参数(?)为2,因此仅显示ID列> 2的行。完整的代码如下-Python控制台中显示的输出如下-...
📅  最后修改于: 2020-11-27 07:47:27        🧑  作者: Mango
现在,我们将学习过滤器操作及其相应的代码和输出。等于常用的运算符是==,它应用条件检查相等性。SQLAlchemy将发送以下SQL表达式-上面代码的输出如下-不等于用于不等于的运算符是!=,它提供了不等于条件。最终的SQL表达式为-以上代码行的输出如下-喜欢like()方法本身为SELECT表达式中的WHERE子句生成LIKE标准。上面的SQLAlchemy代码等效于以下SQL表达式-上面代码的输...
📅  最后修改于: 2020-11-27 07:48:09        🧑  作者: Mango
Query对象有很多方法可以立即发出SQL并返回包含已加载的数据库结果的值。这是返回列表和标量的简短摘要-所有()它返回一个列表。下面给出的是all()函数的代码行。Python控制台显示以下发出的SQL表达式-第一()它应用一个限制,并将第一个结果作为标量返回。LIMIT的绑定参数为1,OFFSET的绑定参数为0。一()此命令将完全获取所有行,并且如果结果中不存在一个完全相同的对象标识或组合行,...
📅  最后修改于: 2020-11-27 07:49:06        🧑  作者: Mango
先前,已经从SQLAlchemy的核心表达语言的角度解释了使用text()函数的文本SQL。现在我们将从ORM的角度进行讨论。通过使用text()构造指定字面量字符串,可以灵活地将其用于Query对象。大多数适用的方法都接受它。例如,filter()和order_by()。在下面给出的示例中,filter()方法将字符串“ id <3”转换为WHERE id <3生成的原始SQL表达式显示了将过滤...
📅  最后修改于: 2020-11-27 07:50:25        🧑  作者: Mango
该会话描述了另一个表的创建,该表与我们数据库中已经存在的表相关。客户表包含客户的主数据。现在,我们需要创建发票表,其中可能包含任意数量的属于客户的发票。这是一对多关系的情况。使用声明式,我们定义此表及其映射的类Invoices,如下所示-这将向SQLite引擎发送一个CREATE TABLE查询,如下所示-我们可以借助SQLiteStudio工具检查在sales.db中是否创建了新表。发票类将Fo...