<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=SQLAlchemy</id>
	<title>SQLAlchemy - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=SQLAlchemy"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SQLAlchemy&amp;action=history"/>
	<updated>2026-06-27T15:10:07Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=SQLAlchemy&amp;diff=1979757&amp;oldid=prev</id>
		<title>2025年12月26日 (五) 16:48 imported&gt;ExultantEditor</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=SQLAlchemy&amp;diff=1979757&amp;oldid=prev"/>
		<updated>2025-12-26T16:48:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA|G1=IT}}&lt;br /&gt;
{{Infobox software&lt;br /&gt;
| name                   = SQLAlchemy&lt;br /&gt;
| title                  = &lt;br /&gt;
| logo                   = File:SQLAlchemy.svg&lt;br /&gt;
| logo size              = 200px&lt;br /&gt;
| screenshot             = &amp;lt;!-- [[File: ]] --&amp;gt;&lt;br /&gt;
| caption                = &lt;br /&gt;
| collapsible            = &lt;br /&gt;
| author                 = 迈克尔·拜尔（Michael Bayer）&amp;lt;ref&amp;gt;{{Cite web |url=http://techspot.zzzeek.org/ |title=Mike Bayer是SQLAlchmey以及Mako Templates for Python的创始人。 |accessdate=2012-11-08 |archive-date=2012-10-26 |archive-url=https://web.archive.org/web/20121026090154/http://techspot.zzzeek.org/ |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| developer              = &lt;br /&gt;
| released               = &amp;lt;!-- {{Start date|YYYY|MM|DD|df=yes/no}} --&amp;gt;2006年2月&amp;lt;ref&amp;gt;[http://onlamp.com/pub/a/python/2007/03/08/pycon-2007-wrapup.html PyCon 2007 Wrapup] {{Wayback|url=http://onlamp.com/pub/a/python/2007/03/08/pycon-2007-wrapup.html |date=20121021151911 }},&amp;#039;&amp;#039;SQLAlchemy released 0.1.0 in February 2006&amp;#039;&amp;#039; - O&amp;#039;Reilly Media&amp;lt;/ref&amp;gt;&lt;br /&gt;
| discontinued           = &lt;br /&gt;
| latest release         = &amp;lt;!--不需要手工更新发行信息--&amp;gt;&lt;br /&gt;
| programming language   = [[Python]]&lt;br /&gt;
| operating system       = [[跨平台]]&lt;br /&gt;
| platform               = &lt;br /&gt;
| size                   = &lt;br /&gt;
| language               = &lt;br /&gt;
| genre                  = [[对象关系映射]]&lt;br /&gt;
| license                = [[MIT许可证]]&lt;br /&gt;
| website                = {{url|http://www.sqlalchemy.org/}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SQLAlchemy&amp;#039;&amp;#039;&amp;#039;是为[[Python]][[编程语言]]提供的[[开放源代码|开源]][[SQL]]工具包及[[对象关系映射器]]（ORM），是在[[MIT许可证]]下发行的软件。&lt;br /&gt;
&lt;br /&gt;
==概述==&lt;br /&gt;
SQLAlchemy提供企业级{{le|持久化 (计算机科学)|Persistence (computer science)|持久化}}[[架构模式|模式]]，首次发行于2006年2月。SQLAlchemy的理念是：关系数据库随着规模变大并且性能开始成为顾虑，而表现得不像对象[[集合 (计算机科学)|搜集]]；而对象搜集随着更多的抽象被设计入其中，而表现得不像[[数据库表|表格]]和[[行 (数据库)|行]]。因此，SQLAlchmey采用了类似于[[Java]]里[[Hibernate]]的[[数据映射器模式]]&amp;lt;ref&amp;gt;{{Cite web |url=http://www.martinfowler.com/eaaCatalog/dataMapper.html |title=数据映射器 |accessdate=2012-11-08 |archive-date=2012-11-04 |archive-url=https://web.archive.org/web/20121104114229/http://www.martinfowler.com/eaaCatalog/dataMapper.html |dead-url=no }}&amp;lt;/ref&amp;gt;，而不是其他[[对象关系映射|ORM]]框架采用的[[主动记录|主动记录模式]]。&lt;br /&gt;
&lt;br /&gt;
== 示例 ==&lt;br /&gt;
下述示例描述了电影同它们的导演之间的多对一[[实体联系模型|联系]]。示例中说明了怎样从用户定义的Python[[类 (计算机科学)|类]]创建对应的数据库表格，怎样从[[实体联系模型|联系]]的任何一方创建有关联的[[实例 (计算机科学)|实例]]，最终怎样查询数据，演示了为延迟加载和预先加载二者自动生成的[[SQL]]查询。&lt;br /&gt;
&lt;br /&gt;
=== 架构定义 ===&lt;br /&gt;
创建两个Python类以及在[[DBMS]]数据库[[Schema (数据库)|架构]]中对应的表格：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
from sqlalchemy import *&lt;br /&gt;
from sqlalchemy.ext.declarative import declarative_base&lt;br /&gt;
from sqlalchemy.orm import relation, sessionmaker&lt;br /&gt;
&lt;br /&gt;
Base = declarative_base()&lt;br /&gt;
 &lt;br /&gt;
class Movie(Base):&lt;br /&gt;
    __tablename__ = &amp;#039;movies&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
    id = Column(Integer, primary_key=True)&lt;br /&gt;
    title = Column(String(255), nullable=False)&lt;br /&gt;
    year = Column(Integer)&lt;br /&gt;
    directed_by = Column(Integer, ForeignKey(&amp;#039;directors.id&amp;#039;))&lt;br /&gt;
 &lt;br /&gt;
    director = relation(&amp;quot;Director&amp;quot;, backref=&amp;#039;movies&amp;#039;, lazy=False)&lt;br /&gt;
 &lt;br /&gt;
    def __init__(self, title=None, year=None):&lt;br /&gt;
        self.title = title&lt;br /&gt;
        self.year = year&lt;br /&gt;
    def __repr__(self):&lt;br /&gt;
        return &amp;quot;Movie(%r, %r, %r)&amp;quot; % (self.title, self.year, self.director)&lt;br /&gt;
 &lt;br /&gt;
class Director(Base):&lt;br /&gt;
    __tablename__ = &amp;#039;directors&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
    id = Column(Integer, primary_key=True)&lt;br /&gt;
    name = Column(String(50), nullable=False, unique=True)&lt;br /&gt;
 &lt;br /&gt;
    def __init__(self, name=None):&lt;br /&gt;
        self.name = name&lt;br /&gt;
 &lt;br /&gt;
    def __repr__(self):&lt;br /&gt;
        return &amp;quot;Director(%r)&amp;quot; % (self.name)&lt;br /&gt;
 &lt;br /&gt;
engine = create_engine(&amp;#039;dbms://user:pwd@host/dbname&amp;#039;)&lt;br /&gt;
Base.metadata.create_all(engine)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 插入数据 ===&lt;br /&gt;
电影与导演[[实体联系模型|联系]]可以通过任何一方[[实体联系模型|实体]]插入：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
Session = sessionmaker(bind=engine)&lt;br /&gt;
session = Session()&lt;br /&gt;
&lt;br /&gt;
m1 = Movie(&amp;quot;Star Trek&amp;quot;, 2009)&lt;br /&gt;
m1.director = Director(&amp;quot;JJ Abrams&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
d2 = Director(&amp;quot;George Lucas&amp;quot;)&lt;br /&gt;
d2.movies = [Movie(&amp;quot;Star Wars&amp;quot;, 1977), Movie(&amp;quot;THX 1138&amp;quot;, 1971)]&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    session.add(m1)&lt;br /&gt;
    session.add(d2)&lt;br /&gt;
    session.commit()&lt;br /&gt;
except:&lt;br /&gt;
    session.rollback()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 查询 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Python&amp;quot;&amp;gt;&lt;br /&gt;
alldata = session.query(Movie).all()&lt;br /&gt;
for somedata in alldata:&lt;br /&gt;
    print somedata&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SQLAlchemy将向DBMS发起如下查询（忽略别名）：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT movies.id, movies.title, movies.year, movies.directed_by, directors.id, directors.name &lt;br /&gt;
FROM movies LEFT OUTER JOIN directors ON directors.id = movies.directed_by&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
输出结果：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
Movie(&amp;#039;Star Trek&amp;#039;, 2009L, Director(&amp;#039;JJ Abrams&amp;#039;))&lt;br /&gt;
Movie(&amp;#039;Star Wars&amp;#039;, 1977L, Director(&amp;#039;George Lucas&amp;#039;))&lt;br /&gt;
Movie(&amp;#039;THX 1138&amp;#039;, 1971L, Director(&amp;#039;George Lucas&amp;#039;))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
假如在架构定义时设置&amp;lt;code&amp;gt;lazy=True&amp;lt;/code&amp;gt;（默认值），SQLAlchemy将首先发起一个查询来获得一个电影列表，并在必要时（延迟）对每个导演发起查询来获得对应导演的名字：&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;SQL&amp;quot;&amp;gt;&lt;br /&gt;
SELECT movies.id, movies.title, movies.year, movies.directed_by &lt;br /&gt;
FROM movies&lt;br /&gt;
&lt;br /&gt;
SELECT directors.id, directors.name&lt;br /&gt;
FROM directors &lt;br /&gt;
WHERE directors.id = %s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{reflist|2}}&lt;br /&gt;
;注释&lt;br /&gt;
{{Div col|2}}&lt;br /&gt;
* {{cite web |title=Using SQLAlchemy |publisher=IBM |work=Developerworks |first=Noah |last=Gift |url=https://www.ibm.com/developerworks/aix/library/au-sqlalchemy/ |date=12 Aug 2008 |accessdate=8 Feb 2011 |deadurl=yes |archiveurl=https://web.archive.org/web/20110812053848/http://www.ibm.com/developerworks/aix/library/au-sqlalchemy/ |archivedate=2011-08-12 }}&lt;br /&gt;
* Rick Copeland, [http://oreilly.com/catalog/9780596516147/ Essential SQLAlchemy]{{Wayback|url=http://oreilly.com/catalog/9780596516147/ |date=20110906162952 }}, [[O&amp;#039;Reilly_Media|O&amp;#039;Reilly]], 2008, ISBN 0-596-51614-2&lt;br /&gt;
{{div col end}}&lt;br /&gt;
&lt;br /&gt;
== 参见 ==&lt;br /&gt;
{{Portal|自由軟體}}&lt;br /&gt;
* [[SQLObject]]&lt;br /&gt;
* {{le|Storm (软件)|Storm (software)|Storm}}&lt;br /&gt;
* [[Pylons]]&lt;br /&gt;
* [[TurboGears]]&lt;br /&gt;
&lt;br /&gt;
== 外部链接 ==&lt;br /&gt;
* [http://www.sqlalchemy.org/ SQLAlchemy主页]{{Wayback|url=http://www.sqlalchemy.org/ |date=20121207211306 }}&lt;br /&gt;
* {{SourceForge|sqlalchemy}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Python库]]&lt;br /&gt;
[[Category:对象关系映射]]&lt;br /&gt;
[[Category:使用MIT许可证的软件]]&lt;/div&gt;</summary>
		<author><name>imported&gt;ExultantEditor</name></author>
	</entry>
</feed>