Update of /cvsroot/sqlobject/SOWeb/docs
In directory sc8-pr-cvs1:/tmp/cvs-serv20298/docs
Modified Files:
Authors.html Authors.txt News.html News.txt SQLObject.html
SQLObject.txt default.css
Log Message:
Updated for 0.5
Index: Authors.html
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/Authors.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Authors.html 7 Sep 2003 18:21:38 -0000 1.3
--- Authors.html 1 Nov 2003 20:34:42 -0000 1.4
***************
*** 15,23 ****
<p>Contributions have been made by:</p>
<ul class="simple">
! <li>Frank Barknecht <<a class="reference" href="mailto:fbar@footils.org">fbar@footils.org</a>></li>
! <li>Bud P. Bruegger <<a class="reference" href="mailto:bug@sistema.it">bug@sistema.it</a>></li>
! <li>David M. Cook <<a class="reference" href="mailto:dave@davidcook.org">dave@davidcook.org</a>></li>
! <li>Luke Opperman <<a class="reference" href="mailto:luke@metathusalan.com">luke@metathusalan.com</a>></li>
! <li>James Ralston <<a class="reference" href="mailto:jralston@hotmail.com">jralston@hotmail.com</a>></li>
</ul>
</div>
--- 15,24 ----
<p>Contributions have been made by:</p>
<ul class="simple">
! <li>Frank Barknecht <fbar at footils.org></li>
! <li>Bud P. Bruegger <bug at sistema.it></li>
! <li>David M. Cook <dave at davidcook.org></li>
! <li>Luke Opperman <luke at metathusalan.com></li>
! <li>James Ralston <jralston at hotmail.com></li>
! <li>Sidnei da Silva <sidnei at awkly.org></li>
</ul>
</div>
Index: Authors.txt
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/Authors.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** Authors.txt 7 Sep 2003 18:21:38 -0000 1.2
--- Authors.txt 1 Nov 2003 20:34:42 -0000 1.3
***************
*** 7,13 ****
Contributions have been made by:
! * Frank Barknecht <fb...@fo...>
! * Bud P. Bruegger <bu...@si...>
! * David M. Cook <da...@da...>
! * Luke Opperman <lu...@me...>
! * James Ralston <jra...@ho...>
--- 7,14 ----
Contributions have been made by:
! * Frank Barknecht <fbar at footils.org>
! * Bud P. Bruegger <bug at sistema.it>
! * David M. Cook <dave at davidcook.org>
! * Luke Opperman <luke at metathusalan.com>
! * James Ralston <jralston at hotmail.com>
! * Sidnei da Silva <sidnei at awkly.org>
Index: News.html
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/News.html,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** News.html 21 Aug 2003 05:06:58 -0000 1.4
--- News.html 1 Nov 2003 20:34:42 -0000 1.5
***************
*** 14,42 ****
<p class="topic-title"><a name="contents">Contents:</a></p>
<ul class="simple">
! <li><a class="reference" href="#sqlobject-0-4" id="id5" name="id5">SQLObject 0.4</a><ul>
! <li><a class="reference" href="#features" id="id6" name="id6">Features</a><ul>
! <li><a class="reference" href="#col-and-join" id="id7" name="id7">Col and Join</a></li>
</ul>
</li>
! <li><a class="reference" href="#bugs" id="id8" name="id8">Bugs</a></li>
! <li><a class="reference" href="#internal" id="id9" name="id9">Internal</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-0-3" id="id10" name="id10">SQLObject 0.3</a><ul>
! <li><a class="reference" href="#id1" id="id11" name="id11">Features</a></li>
! <li><a class="reference" href="#id2" id="id12" name="id12">Bugs</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-0-2-1" id="id13" name="id13">SQLObject 0.2.1</a><ul>
! <li><a class="reference" href="#id3" id="id14" name="id14">Bugs</a></li>
! <li><a class="reference" href="#id4" id="id15" name="id15">Features</a></li>
</ul>
</li>
</ul>
</div>
! <a class="target" id="start" name="start"></a><div class="section" id="sqlobject-0-4">
! <h1><a name="sqlobject-0-4">SQLObject 0.4</a></h1>
<div class="section" id="features">
<h2><a name="features">Features</a></h2>
<ul>
<li><p class="first">You can specify columns in a new, preferred manner:</p>
--- 14,99 ----
<p class="topic-title"><a name="contents">Contents:</a></p>
<ul class="simple">
! <li><a class="reference" href="#sqlobject-0-5" id="id7" name="id7">SQLObject 0.5</a><ul>
! <li><a class="reference" href="#features" id="id8" name="id8">Features</a></li>
! <li><a class="reference" href="#interface-changes" id="id9" name="id9">Interface Changes</a></li>
! <li><a class="reference" href="#bugs" id="id10" name="id10">Bugs</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-0-4" id="id11" name="id11">SQLObject 0.4</a><ul>
! <li><a class="reference" href="#id1" id="id12" name="id12">Features</a><ul>
! <li><a class="reference" href="#col-and-join" id="id13" name="id13">Col and Join</a></li>
</ul>
</li>
! <li><a class="reference" href="#id2" id="id14" name="id14">Bugs</a></li>
! <li><a class="reference" href="#internal" id="id15" name="id15">Internal</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-0-3" id="id16" name="id16">SQLObject 0.3</a><ul>
! <li><a class="reference" href="#id3" id="id17" name="id17">Features</a></li>
! <li><a class="reference" href="#id4" id="id18" name="id18">Bugs</a></li>
! </ul>
! </li>
! <li><a class="reference" href="#sqlobject-0-2-1" id="id19" name="id19">SQLObject 0.2.1</a><ul>
! <li><a class="reference" href="#id5" id="id20" name="id20">Bugs</a></li>
! <li><a class="reference" href="#id6" id="id21" name="id21">Features</a></li>
</ul>
</li>
</ul>
</div>
! <a class="target" id="start" name="start"></a><div class="section" id="sqlobject-0-5">
! <h1><a name="sqlobject-0-5">SQLObject 0.5</a></h1>
! <p>Released: 1-Nov-2003</p>
<div class="section" id="features">
<h2><a name="features">Features</a></h2>
+ <ul class="simple">
+ <li><a class="reference" href="http://firebird.sourceforge.net/">Firebird</a> support.</li>
+ <li>Database-specific literal quoting (motivation: MySQL and Postgres
+ use backslashes, Firebird and SQLite do not).</li>
+ <li>Generic conversion/validation can be added to columns.</li>
+ <li>BoolCol for portable boolean columns (BOOL on Postgres, INT on
+ MySQL, etc.)</li>
+ <li>Non-integer IDs. (Automatic table creation is not supported for
+ non-integer IDs)</li>
+ <li>Explicit IDs for new instances/rows (required for non-integer IDs).</li>
+ <li>Instances can be synced with the database (in case there have been
+ updates to the object since it was first fetched).</li>
+ <li>Instances can be expired, so that they will be synced when they are
+ next accessed.</li>
+ </ul>
+ </div>
+ <div class="section" id="interface-changes">
+ <h2><a name="interface-changes">Interface Changes</a></h2>
+ <ul class="simple">
+ <li><cite>SQLBuilder.sqlRepr</cite> renamed to <cite>SQLBuilder.sqlrepr</cite>, signature
+ changed to <tt class="literal"><span class="pre">sqlrepr(value,</span> <span class="pre">databaseName)</span></tt> to quote <tt class="literal"><span class="pre">value</span></tt>,
+ where <tt class="literal"><span class="pre">databaseName</span></tt> is one of <tt class="literal"><span class="pre">"mysql"</span></tt>, <tt class="literal"><span class="pre">"postgres"</span></tt>,
+ <tt class="literal"><span class="pre">"sqlite"</span></tt>, <tt class="literal"><span class="pre">"firebird"</span></tt>.</li>
+ <li><tt class="literal"><span class="pre">sqlRepr</span></tt> magic method renamed to <tt class="literal"><span class="pre">__sqlrepr__</span></tt>, and takes new
+ <tt class="literal"><span class="pre">databaseName</span></tt> argument.</li>
+ <li>When using explicit booleans, use <tt class="literal"><span class="pre">Col.TRUE</span></tt> and <tt class="literal"><span class="pre">Col.FALSE</span></tt> for
+ backward compatibility with Python 2.2. This is not required for
+ <tt class="literal"><span class="pre">BoolCol</span></tt>, however (which converts all true values to TRUE and
+ false values to FALSE)</li>
+ <li>SQLObject has a <tt class="literal"><span class="pre">sqlrepr</span></tt> method, so you can construct queries
+ with something like <tt class="literal"><span class="pre">"WHERE</span> <span class="pre">last_name</span> <span class="pre">=</span> <span class="pre">%s"</span> <span class="pre">%</span>
+ <span class="pre">Person.sqlrepr('Bob')</span></tt></li>
+ </ul>
+ </div>
+ <div class="section" id="bugs">
+ <h2><a name="bugs">Bugs</a></h2>
+ <ul class="simple">
+ <li>Released all locks with <tt class="literal"><span class="pre">finally:</span></tt>, so that bugs won't cause
+ frozen locks.</li>
+ <li>Tons of transaction fixes. Transactions pretty much work.</li>
+ <li>A class can have multiple foreign keys pointing to the same table
+ (e.g., <tt class="literal"><span class="pre">spouse</span> <span class="pre">=</span> <span class="pre">ForeignKey("Person");</span> <span class="pre">supervisor</span> <span class="pre">=</span>
+ <span class="pre">ForeignKey("Person")</span></tt>)</li>
+ </ul>
+ </div>
+ </div>
+ <div class="section" id="sqlobject-0-4">
+ <h1><a name="sqlobject-0-4">SQLObject 0.4</a></h1>
+ <div class="section" id="id1">
+ <h2><a name="id1">Features</a></h2>
<ul>
<li><p class="first">You can specify columns in a new, preferred manner:</p>
***************
*** 125,130 ****
</div>
</div>
! <div class="section" id="bugs">
! <h2><a name="bugs">Bugs</a></h2>
<ul class="simple">
<li><cite>DateTimeCol</cite> uses <tt class="literal"><span class="pre">TIMESTAMP</span></tt> for Postgres. Note that the
--- 182,187 ----
</div>
</div>
! <div class="section" id="id2">
! <h2><a name="id2">Bugs</a></h2>
<ul class="simple">
<li><cite>DateTimeCol</cite> uses <tt class="literal"><span class="pre">TIMESTAMP</span></tt> for Postgres. Note that the
***************
*** 165,170 ****
<div class="section" id="sqlobject-0-3">
<h1><a name="sqlobject-0-3">SQLObject 0.3</a></h1>
! <div class="section" id="id1">
! <h2><a name="id1">Features</a></h2>
<ul class="simple">
<li>Table creation (SQL schema generation) via new class method
--- 222,227 ----
<div class="section" id="sqlobject-0-3">
<h1><a name="sqlobject-0-3">SQLObject 0.3</a></h1>
! <div class="section" id="id3">
! <h2><a name="id3">Features</a></h2>
<ul class="simple">
<li>Table creation (SQL schema generation) via new class method
***************
*** 193,198 ****
</ul>
</div>
! <div class="section" id="id2">
! <h2><a name="id2">Bugs</a></h2>
<ul class="simple">
<li>LIMIT/OFFSET (select result slicing) works in Postgres and SQLite.</li>
--- 250,255 ----
</ul>
</div>
! <div class="section" id="id4">
! <h2><a name="id4">Bugs</a></h2>
<ul class="simple">
<li>LIMIT/OFFSET (select result slicing) works in Postgres and SQLite.</li>
***************
*** 205,216 ****
<div class="section" id="sqlobject-0-2-1">
<h1><a name="sqlobject-0-2-1">SQLObject 0.2.1</a></h1>
! <div class="section" id="id3">
! <h2><a name="id3">Bugs</a></h2>
<ul class="simple">
<li>Fixed caching of new objects</li>
</ul>
</div>
! <div class="section" id="id4">
! <h2><a name="id4">Features</a></h2>
<ul class="simple">
<li><a class="reference" href="http://sqlite.org/">SQLite</a> support</li>
--- 262,273 ----
<div class="section" id="sqlobject-0-2-1">
<h1><a name="sqlobject-0-2-1">SQLObject 0.2.1</a></h1>
! <div class="section" id="id5">
! <h2><a name="id5">Bugs</a></h2>
<ul class="simple">
<li>Fixed caching of new objects</li>
</ul>
</div>
! <div class="section" id="id6">
! <h2><a name="id6">Features</a></h2>
<ul class="simple">
<li><a class="reference" href="http://sqlite.org/">SQLite</a> support</li>
Index: News.txt
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/News.txt,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** News.txt 5 Jul 2003 04:39:07 -0000 1.3
--- News.txt 1 Nov 2003 20:34:42 -0000 1.4
***************
*** 8,11 ****
--- 8,74 ----
.. _start:
+ SQLObject 0.5
+ =============
+
+ Released: 1-Nov-2003
+
+ Features
+ --------
+
+ * Firebird_ support.
+
+ * Database-specific literal quoting (motivation: MySQL and Postgres
+ use backslashes, Firebird and SQLite do not).
+
+ * Generic conversion/validation can be added to columns.
+
+ * BoolCol for portable boolean columns (BOOL on Postgres, INT on
+ MySQL, etc.)
+
+ * Non-integer IDs. (Automatic table creation is not supported for
+ non-integer IDs)
+
+ * Explicit IDs for new instances/rows (required for non-integer IDs).
+
+ * Instances can be synced with the database (in case there have been
+ updates to the object since it was first fetched).
+
+ * Instances can be expired, so that they will be synced when they are
+ next accessed.
+
+ .. _Firebird: http://firebird.sourceforge.net/
+
+ Interface Changes
+ -----------------
+
+ * `SQLBuilder.sqlRepr` renamed to `SQLBuilder.sqlrepr`, signature
+ changed to ``sqlrepr(value, databaseName)`` to quote ``value``,
+ where ``databaseName`` is one of ``"mysql"``, ``"postgres"``,
+ ``"sqlite"``, ``"firebird"``.
+
+ * ``sqlRepr`` magic method renamed to ``__sqlrepr__``, and takes new
+ ``databaseName`` argument.
+
+ * When using explicit booleans, use ``Col.TRUE`` and ``Col.FALSE`` for
+ backward compatibility with Python 2.2. This is not required for
+ ``BoolCol``, however (which converts all true values to TRUE and
+ false values to FALSE)
+
+ * SQLObject has a ``sqlrepr`` method, so you can construct queries
+ with something like ``"WHERE last_name = %s" %
+ Person.sqlrepr('Bob')``
+
+ Bugs
+ ----
+
+ * Released all locks with ``finally:``, so that bugs won't cause
+ frozen locks.
+
+ * Tons of transaction fixes. Transactions pretty much work.
+
+ * A class can have multiple foreign keys pointing to the same table
+ (e.g., ``spouse = ForeignKey("Person"); supervisor =
+ ForeignKey("Person")``)
+
SQLObject 0.4
=============
Index: SQLObject.html
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/SQLObject.html,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** SQLObject.html 21 Aug 2003 05:06:58 -0000 1.6
--- SQLObject.html 1 Nov 2003 20:34:42 -0000 1.7
***************
*** 5,74 ****
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.3.0: http://docutils.sourceforge.net/" />
! <title>SQLObject 0.4</title>
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
! <div class="document" id="sqlobject-0-4">
! <h1 class="title">SQLObject 0.4</h1>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents:</a></p>
<ul class="simple">
! <li><a class="reference" href="#author-site-and-license" id="id7" name="id7">Author, Site, and License</a></li>
! <li><a class="reference" href="#introduction" id="id8" name="id8">Introduction</a></li>
! <li><a class="reference" href="#requirements" id="id9" name="id9">Requirements</a></li>
! <li><a class="reference" href="#compared-to-other-database-wrappers" id="id10" name="id10">Compared To Other Database Wrappers</a></li>
! <li><a class="reference" href="#future" id="id11" name="id11">Future</a></li>
! <li><a class="reference" href="#using-sqlobject-an-introduction" id="id12" name="id12">Using SQLObject: An Introduction</a><ul>
! <li><a class="reference" href="#declaring-the-class" id="id13" name="id13">Declaring the Class</a></li>
! <li><a class="reference" href="#using-the-class" id="id14" name="id14">Using the Class</a></li>
! <li><a class="reference" href="#one-to-many-relationships" id="id15" name="id15">One-to-Many Relationships</a></li>
! <li><a class="reference" href="#many-to-many-relationships" id="id16" name="id16">Many-to-Many Relationships</a></li>
! <li><a class="reference" href="#selecting-multiple-objects" id="id17" name="id17">Selecting Multiple Objects</a></li>
! <li><a class="reference" href="#customizing-the-objects" id="id18" name="id18">Customizing the Objects</a><ul>
! <li><a class="reference" href="#initializing-the-objects" id="id19" name="id19">Initializing the Objects</a></li>
! <li><a class="reference" href="#adding-magic-attributes-properties" id="id20" name="id20">Adding Magic Attributes (properties)</a></li>
! <li><a class="reference" href="#overriding-column-attributes" id="id21" name="id21">Overriding Column Attributes</a></li>
</ul>
</li>
</ul>
</li>
! <li><a class="reference" href="#reference" id="id22" name="id22">Reference</a><ul>
! <li><a class="reference" href="#col-class-specifying-columns" id="id23" name="id23">Col Class: Specifying Columns</a><ul>
! <li><a class="reference" href="#subclasses-of-col" id="id24" name="id24">Subclasses of Col</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-class-specifying-your-class" id="id25" name="id25">SQLObject Class: Specifying Your Class</a></li>
! <li><a class="reference" href="#relationships-between-classes-tables" id="id26" name="id26">Relationships Between Classes/Tables</a><ul>
! <li><a class="reference" href="#multiplejoin-one-to-many" id="id27" name="id27">MultipleJoin: One-to-Many</a></li>
! <li><a class="reference" href="#relatedjoin-many-to-many" id="id28" name="id28">RelatedJoin: Many-to-Many</a></li>
</ul>
</li>
! <li><a class="reference" href="#transactions" id="id29" name="id29">Transactions</a></li>
! <li><a class="reference" href="#automatic-schema-generation" id="id30" name="id30">Automatic Schema Generation</a><ul>
! <li><a class="reference" href="#columns-types" id="id31" name="id31">Columns Types</a></li>
! <li><a class="reference" href="#creating-and-dropping-tables" id="id32" name="id32">Creating and Dropping Tables</a></li>
</ul>
</li>
</ul>
</li>
! <li><a class="reference" href="#dynamic-classes" id="id33" name="id33">Dynamic Classes</a><ul>
! <li><a class="reference" href="#automatic-class-generation" id="id34" name="id34">Automatic Class Generation</a></li>
! <li><a class="reference" href="#runtime-column-changes" id="id35" name="id35">Runtime Column Changes</a></li>
</ul>
</li>
! <li><a class="reference" href="#legacy-database-schemas" id="id36" name="id36">Legacy Database Schemas</a><ul>
! <li><a class="reference" href="#sqlobject-requirements" id="id37" name="id37">SQLObject requirements</a></li>
! <li><a class="reference" href="#changing-the-naming-style" id="id38" name="id38">Changing the Naming Style</a></li>
! <li><a class="reference" href="#irregular-naming" id="id39" name="id39">Irregular Naming</a></li>
</ul>
</li>
! <li><a class="reference" href="#dbconnection-database-connections" id="id40" name="id40">DBConnection: Database Connections</a><ul>
! <li><a class="reference" href="#mysql" id="id41" name="id41">MySQL</a></li>
! <li><a class="reference" href="#postgres" id="id42" name="id42">Postgres</a></li>
! <li><a class="reference" href="#sqlite" id="id43" name="id43">SQLite</a></li>
! <li><a class="reference" href="#dbmconnection" id="id44" name="id44">DBMConnection</a></li>
</ul>
</li>
! <li><a class="reference" href="#exported-symbols" id="id45" name="id45">Exported Symbols</a></li>
</ul>
</div>
--- 5,76 ----
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.3.0: http://docutils.sourceforge.net/" />
! <title>SQLObject 0.5</title>
<link rel="stylesheet" href="default.css" type="text/css" />
</head>
<body>
! <div class="document" id="sqlobject-0-5">
! <h1 class="title">SQLObject 0.5</h1>
<div class="contents topic" id="contents">
<p class="topic-title"><a name="contents">Contents:</a></p>
<ul class="simple">
! <li><a class="reference" href="#author-site-and-license" id="id9" name="id9">Author, Site, and License</a></li>
! <li><a class="reference" href="#introduction" id="id10" name="id10">Introduction</a></li>
! <li><a class="reference" href="#requirements" id="id11" name="id11">Requirements</a></li>
! <li><a class="reference" href="#compared-to-other-database-wrappers" id="id12" name="id12">Compared To Other Database Wrappers</a></li>
! <li><a class="reference" href="#future" id="id13" name="id13">Future</a></li>
! <li><a class="reference" href="#using-sqlobject-an-introduction" id="id14" name="id14">Using SQLObject: An Introduction</a><ul>
! <li><a class="reference" href="#declaring-the-class" id="id15" name="id15">Declaring the Class</a></li>
! <li><a class="reference" href="#using-the-class" id="id16" name="id16">Using the Class</a></li>
! <li><a class="reference" href="#one-to-many-relationships" id="id17" name="id17">One-to-Many Relationships</a></li>
! <li><a class="reference" href="#many-to-many-relationships" id="id18" name="id18">Many-to-Many Relationships</a></li>
! <li><a class="reference" href="#selecting-multiple-objects" id="id19" name="id19">Selecting Multiple Objects</a></li>
! <li><a class="reference" href="#customizing-the-objects" id="id20" name="id20">Customizing the Objects</a><ul>
! <li><a class="reference" href="#initializing-the-objects" id="id21" name="id21">Initializing the Objects</a></li>
! <li><a class="reference" href="#adding-magic-attributes-properties" id="id22" name="id22">Adding Magic Attributes (properties)</a></li>
! <li><a class="reference" href="#overriding-column-attributes" id="id23" name="id23">Overriding Column Attributes</a></li>
</ul>
</li>
</ul>
</li>
! <li><a class="reference" href="#reference" id="id24" name="id24">Reference</a><ul>
! <li><a class="reference" href="#col-class-specifying-columns" id="id25" name="id25">Col Class: Specifying Columns</a><ul>
! <li><a class="reference" href="#subclasses-of-col" id="id26" name="id26">Subclasses of Col</a></li>
</ul>
</li>
! <li><a class="reference" href="#sqlobject-class-specifying-your-class" id="id27" name="id27">SQLObject Class: Specifying Your Class</a></li>
! <li><a class="reference" href="#relationships-between-classes-tables" id="id28" name="id28">Relationships Between Classes/Tables</a><ul>
! <li><a class="reference" href="#multiplejoin-one-to-many" id="id29" name="id29">MultipleJoin: One-to-Many</a></li>
! <li><a class="reference" href="#relatedjoin-many-to-many" id="id30" name="id30">RelatedJoin: Many-to-Many</a></li>
</ul>
</li>
! <li><a class="reference" href="#transactions" id="id31" name="id31">Transactions</a></li>
! <li><a class="reference" href="#automatic-schema-generation" id="id32" name="id32">Automatic Schema Generation</a><ul>
! <li><a class="reference" href="#columns-types" id="id33" name="id33">Columns Types</a></li>
! <li><a class="reference" href="#creating-and-dropping-tables" id="id34" name="id34">Creating and Dropping Tables</a></li>
</ul>
</li>
</ul>
</li>
! <li><a class="reference" href="#dynamic-classes" id="id35" name="id35">Dynamic Classes</a><ul>
! <li><a class="reference" href="#automatic-class-generation" id="id36" name="id36">Automatic Class Generation</a></li>
! <li><a class="reference" href="#runtime-column-changes" id="id37" name="id37">Runtime Column Changes</a></li>
</ul>
</li>
! <li><a class="reference" href="#legacy-database-schemas" id="id38" name="id38">Legacy Database Schemas</a><ul>
! <li><a class="reference" href="#sqlobject-requirements" id="id39" name="id39">SQLObject requirements</a></li>
! <li><a class="reference" href="#changing-the-naming-style" id="id40" name="id40">Changing the Naming Style</a></li>
! <li><a class="reference" href="#irregular-naming" id="id41" name="id41">Irregular Naming</a></li>
! <li><a class="reference" href="#non-integer-keys" id="id42" name="id42">Non-Integer Keys</a></li>
</ul>
</li>
! <li><a class="reference" href="#dbconnection-database-connections" id="id43" name="id43">DBConnection: Database Connections</a><ul>
! <li><a class="reference" href="#mysql" id="id44" name="id44">MySQL</a></li>
! <li><a class="reference" href="#postgres" id="id45" name="id45">Postgres</a></li>
! <li><a class="reference" href="#id6" id="id46" name="id46">SQLite</a></li>
! <li><a class="reference" href="#id7" id="id47" name="id47">Firebird</a></li>
! <li><a class="reference" href="#dbmconnection" id="id48" name="id48">DBMConnection</a></li>
</ul>
</li>
! <li><a class="reference" href="#exported-symbols" id="id49" name="id49">Exported Symbols</a></li>
</ul>
</div>
***************
*** 100,106 ****
<div class="section" id="requirements">
<h1><a name="requirements">Requirements</a></h1>
! <p>Currently SQLObject supports MySQL, PostgreSQL (via <tt class="literal"><span class="pre">psycopg</span></tt>),
! SQLite, and a DBM-based store. The DBM backend is the youngest,
! and somewhat experimental.</p>
<p>Python 2.2 or higher is required. SQLObject makes extensive use of
new-style classes.</p>
--- 102,108 ----
<div class="section" id="requirements">
<h1><a name="requirements">Requirements</a></h1>
! <p>Currently SQLObject supports <a class="reference" href="#mysql">MySQL</a>, <a class="reference" href="http://postgresql.org">PostgreSQL</a> (via <tt class="literal"><span class="pre">psycopg</span></tt>),
! <a class="reference" href="http://sqlite.org">SQLite</a>, <a class="reference" href="http://firebird.sourceforge.net">Firebird</a>, and a DBM-based store. The DBM backend is
! experimental.</p>
<p>Python 2.2 or higher is required. SQLObject makes extensive use of
new-style classes.</p>
***************
*** 156,170 ****
<p>Here are some things I plan:</p>
<ul class="simple">
! <li>More databases supported. SQL databases (like Oracle or Firebird)
! should be easy, non-SQL databases like Metakit should be possible.</li>
<li>Better transaction support -- right now you can use transactions
for the database, but the object isn't transaction-aware, so
! non-database persistence won't be able to be rolled back.
! Locking and other techniques to handle concurrency will also be
! implemented (probably in 0.5).</li>
<li>Profile of SQLObject performance, so that I can identify bottlenecks.</li>
! <li>Makes hooks with a validation and form generation package, so
! SQLObject classes (read: schemas) can be published for editing
! more directly and easily.</li>
<li>Automatic joins in select queries.</li>
<li>More kinds of joins, and more powerful join results (closer to how
--- 158,171 ----
<p>Here are some things I plan:</p>
<ul class="simple">
! <li>More databases supported. There has been interest and some work in
! the progress for Oracle, Sybase, and MS-SQL support.</li>
<li>Better transaction support -- right now you can use transactions
for the database, but the object isn't transaction-aware, so
! non-database persistence won't be able to be rolled back.</li>
! <li>Optimistic locking and other techniques to handle concurrency.</li>
<li>Profile of SQLObject performance, so that I can identify bottlenecks.</li>
! <li>Increase hooks with FormEncode (unreleased) validation and form
! generation package, so SQLObject classes (read: schemas) can be
! published for editing more directly and easily.</li>
<li>Automatic joins in select queries.</li>
<li>More kinds of joins, and more powerful join results (closer to how
***************
*** 179,183 ****
<p>To begin with, let's make a database connection. Choose from one of
<cite>MySQLConnection</cite>, <cite>PostgresConnection</cite>, <cite>SQLiteConnection</cite>, and
! <cite>DBMConnection</cite>, depending on what database you use.</p>
<pre class="literal-block"><tt><span class="normal">conn</span> <span class="symbol">=</span> <span class="function">MySQLConnection</span><span class="symbol">(</span><span class="normal">user</span><span class="symbol">=</span><span class="string">'test'</span><span class="symbol">,</span> <span class="normal">db</span><span class="symbol">=</span><span class="string">'testdb'</span><span class="symbol">)</span>
--- 180,184 ----
<p>To begin with, let's make a database connection. Choose from one of
<cite>MySQLConnection</cite>, <cite>PostgresConnection</cite>, <cite>SQLiteConnection</cite>, and
! <cite>FirebirdConnection</cite>, depending on what database you use.</p>
<pre class="literal-block"><tt><span class="normal">conn</span> <span class="symbol">=</span> <span class="function">MySQLConnection</span><span class="symbol">(</span><span class="normal">user</span><span class="symbol">=</span><span class="string">'test'</span><span class="symbol">,</span> <span class="normal">db</span><span class="symbol">=</span><span class="string">'testdb'</span><span class="symbol">)</span>
***************
*** 187,193 ****
</tt></pre>
<p>The rest of this will be written more-or-less in a database-agnostic
! manner, using the connection you define. (Use <cite>DBMConnection</cite> if you
! don't have another database installed or ready -- it only uses
! standard Python modules, and writes to a directory)</p>
<p>We'll develop a simple addressbook-like database. We could create the
tables ourselves, and just have SQLObject access those tables, but for
--- 188,194 ----
</tt></pre>
<p>The rest of this will be written more-or-less in a database-agnostic
! manner, using the connection you define. Use <cite>SQLite</cite> if you don't
! have another database installed or ready -- it requires <a class="reference" href="http://pysqlite.sourceforge.net/">PySQLite</a>, but
! doesn't require a client/server setup.</p>
<p>We'll develop a simple addressbook-like database. We could create the
tables ourselves, and just have SQLObject access those tables, but for
***************
*** 216,224 ****
<span class="symbol">)</span><span class="symbol">;</span>
</tt></pre>
! <p>This is for MySQL. The schema for Postgres or SQLite looks a little
different (especially the <tt class="literal"><span class="pre">id</span></tt> column). You'll notice the names
were changed from mixedCase to underscore_separated -- this is done by
! the <a class="reference" href="#changing-the-naming-style">style object</a>. There are a variety of ways to handle
! other names that are not as SQLObject expects (see <a class="reference" href="#irregular-naming">Irregular Naming</a>).</p>
<p>The tables don't yet exist. We'll let SQLObject create them:</p>
--- 217,225 ----
<span class="symbol">)</span><span class="symbol">;</span>
</tt></pre>
! <p>This is for MySQL. The schema for other databases looks slightly
different (especially the <tt class="literal"><span class="pre">id</span></tt> column). You'll notice the names
were changed from mixedCase to underscore_separated -- this is done by
! the <a class="reference" href="#changing-the-naming-style">style object</a>. There are a variety of ways to handle that names
! that don't fit conventions (see <a class="reference" href="#irregular-naming">Irregular Naming</a>).</p>
<p>The tables don't yet exist. We'll let SQLObject create them:</p>
***************
*** 237,241 ****
as <tt class="literal"><span class="pre">INT</span> <span class="pre">PRIMARY</span> <span class="pre">KEY</span> <span class="pre">AUTO_INCREMENT</span></tt>, in Postgres <tt class="literal"><span class="pre">SERIAL</span> <span class="pre">PRIMARY</span>
<span class="pre">KEY</span></tt>, and in SQLite as <tt class="literal"><span class="pre">INTEGER</span> <span class="pre">PRIMARY</span> <span class="pre">KEY</span></tt>. You can <a class="reference" href="#idname">override the
! name</a>, but some integer primary key must exist.</p>
</div>
<div class="section" id="using-the-class">
--- 238,243 ----
as <tt class="literal"><span class="pre">INT</span> <span class="pre">PRIMARY</span> <span class="pre">KEY</span> <span class="pre">AUTO_INCREMENT</span></tt>, in Postgres <tt class="literal"><span class="pre">SERIAL</span> <span class="pre">PRIMARY</span>
<span class="pre">KEY</span></tt>, and in SQLite as <tt class="literal"><span class="pre">INTEGER</span> <span class="pre">PRIMARY</span> <span class="pre">KEY</span></tt>. You can <a class="reference" href="#idname">override the
! name</a>, but some integer primary key must exist (though <a class="reference" href="#non-integer-keys">you can use
! non-integer keys</a> with some extra effort).</p>
</div>
<div class="section" id="using-the-class">
***************
*** 476,480 ****
<span class="normal">clauseTables</span><span class="symbol">=</span><span class="symbol">[</span><span class="string">'address'</span><span class="symbol">]</span><span class="symbol">)</span>
</tt></pre>
! <p>You may wish to use <cite>SQLBuilder.sqlRepr</cite> to quote any values you use
if you use this technique (quoting is automatic if you use <tt class="literal"><span class="pre">q</span></tt>).
Tables given in <cite>clauseTables</cite> will be added to the <tt class="literal"><span class="pre">FROM</span></tt> portion
--- 478,482 ----
<span class="normal">clauseTables</span><span class="symbol">=</span><span class="symbol">[</span><span class="string">'address'</span><span class="symbol">]</span><span class="symbol">)</span>
</tt></pre>
! <p>You may wish to use <cite>MyClass.sqlrepr</cite> to quote any values you use
if you use this technique (quoting is automatic if you use <tt class="literal"><span class="pre">q</span></tt>).
Tables given in <cite>clauseTables</cite> will be added to the <tt class="literal"><span class="pre">FROM</span></tt> portion
***************
*** 686,689 ****
--- 688,715 ----
different types of columns, when SQLObject creates your tables.</p>
<dl>
+ <dt><cite>BoolCol</cite>:</dt>
+ <dd>Will create a <tt class="literal"><span class="pre">BOOLEAN</span></tt> column in Postgres, or <tt class="literal"><span class="pre">INT</span></tt> in other
+ databses. It will also convert values to <tt class="literal"><span class="pre">"t"/"f"</span></tt> or <tt class="literal"><span class="pre">0/1</span></tt>
+ according to the database backend.</dd>
+ <dt><cite>CurrencyCol</cite>:</dt>
+ <dd>Equivalent to <tt class="literal"><span class="pre">DecimalCol(size=10,</span> <span class="pre">precision=2)</span></tt>.</dd>
+ <dt><cite>DateTimeCol</cite>:</dt>
+ <dd>A date and time (usually returned as an mxDateTime object).</dd>
+ <dt><cite>DecimalCol</cite>:</dt>
+ <dd>Base-10, precise number. Uses the keyword arguments <cite>size</cite> for
+ number of digits stored, and <cite>precision</cite> for the number of digits
+ after the decimal point.</dd>
+ <dt><cite>EnumCol</cite>:</dt>
+ <dd>One of several string values -- give the possible strings as a
+ list, with the <cite>enumValues</cite> keyword argument. MySQL has a native
+ <tt class="literal"><span class="pre">ENUM</span></tt> type, but will work with other databases too (storage
+ just won't be as efficient).</dd>
+ <dt><cite>FloatCol</cite>:</dt>
+ <dd>Floats.</dd>
+ <dt><cite>ForeignKey</cite>:</dt>
+ <dd>A key to another table/class. Use like <tt class="literal"><span class="pre">user</span> <span class="pre">=</span>
+ <span class="pre">ForeignKey('User')</span></tt>.</dd>
+ <dt><cite>IntCol</cite>:</dt>
+ <dd>Integers.</dd>
<dt><cite>StringCol</cite>:</dt>
<dd><p class="first">A string (character) column. Extra keywords:</p>
***************
*** 698,721 ****
</dl>
</dd>
- <dt><cite>IntCol</cite>:</dt>
- <dd>Integers, real simple.</dd>
- <dt><cite>FloatCol</cite>:</dt>
- <dd>Floats.</dd>
- <dt><cite>ForeignKey</cite>:</dt>
- <dd>A key to another table/class. Use like <tt class="literal"><span class="pre">user</span> <span class="pre">=</span>
- <span class="pre">ForeignKey('User')</span></tt>.</dd>
- <dt><cite>EnumCol</cite>:</dt>
- <dd>One of several string values -- give the possible strings as a
- list, with the <cite>enumValues</cite> keyword argument. MySQL has a native
- <tt class="literal"><span class="pre">ENUM</span></tt> type, but will work with other databases too (storage
- just won't be as efficient).</dd>
- <dt><cite>DateTimeCol</cite>:</dt>
- <dd>A date and time (usually returned as an mxDateTime object).</dd>
- <dt><cite>DecimalCol</cite>:</dt>
- <dd>Base-10, precise number. Uses the keyword arguments <cite>size</cite> for
- number of digits stored, and <cite>precision</cite> for the number of digits
- after the decimal point.</dd>
- <dt><cite>CurrencyCol</cite>:</dt>
- <dd>Equivalent to <tt class="literal"><span class="pre">DecimalCol(size=10,</span> <span class="pre">precision=2)</span></tt>.</dd>
</dl>
</div>
--- 724,727 ----
***************
*** 926,930 ****
<p>You can still specify columns (in <cite>_columns</cite>), and only missing
columns will be added.</p>
! <p><em>This is only supported in MySQL and Postgres</em></p>
</div>
<div class="section" id="runtime-column-changes">
--- 932,936 ----
<p>You can still specify columns (in <cite>_columns</cite>), and only missing
columns will be added.</p>
! <p><em>This is not supported in SQLite</em></p>
</div>
<div class="section" id="runtime-column-changes">
***************
*** 1032,1035 ****
--- 1038,1049 ----
column name.</p>
</div>
+ <div class="section" id="non-integer-keys">
+ <h2><a name="non-integer-keys">Non-Integer Keys</a></h2>
+ <p>While not strictly a legacy database issue, this fits into the
+ category of "irregularities". If you use non-integer keys, all
+ primary key management is up to you. You must create the table
+ yourself, and when you create instances you must pass a <tt class="literal"><span class="pre">id</span></tt> keyword
+ argument into <tt class="literal"><span class="pre">new</span></tt> (like <tt class="literal"><span class="pre">Person.new(id='555-55-5555',</span> <span class="pre">...)</span></tt>).</p>
+ </div>
</div>
<div class="section" id="dbconnection-database-connections">
***************
*** 1047,1051 ****
<p>MySQLConnection supports all the features, though MySQL does not
support <a class="reference" href="#transactions">transactions</a> (except using a special proprietary backend that
! no one I've seen uses).</p>
</div>
<div class="section" id="postgres">
--- 1061,1065 ----
<p>MySQLConnection supports all the features, though MySQL does not
support <a class="reference" href="#transactions">transactions</a> (except using a special proprietary backend that
! I haven't used).</p>
</div>
<div class="section" id="postgres">
***************
*** 1057,1062 ****
<p>PostgresConnection supports transactions and all other features.</p>
</div>
! <div class="section" id="sqlite">
! <h2><a name="sqlite">SQLite</a></h2>
<p><cite>SQLiteConnection</cite> takes the a single string, which is the path to the
database file.</p>
--- 1071,1076 ----
<p>PostgresConnection supports transactions and all other features.</p>
</div>
! <div class="section" id="id6">
! <h2><a name="id6">SQLite</a></h2>
<p><cite>SQLiteConnection</cite> takes the a single string, which is the path to the
database file.</p>
***************
*** 1069,1072 ****
--- 1083,1097 ----
<p>SQLite may have concurrency issues, depending on your usage in a
multi-threaded environment.</p>
+ </div>
+ <div class="section" id="id7">
+ <h2><a name="id7">Firebird</a></h2>
+ <p><cite>FirebirdConnection</cite> takes the arguments <cite>host</cite>, <cite>db</cite>, <cite>user</cite> (default
+ <tt class="literal"><span class="pre">"sysdba"</span></tt>), <cite>passwd</cite> (default <tt class="literal"><span class="pre">"masterkey"</span></tt>).</p>
+ <p>Firebird supports all the features. Support is still young, so there
+ may be some issues, especially with concurrent access, and especially
+ using lazy selects. Try <tt class="literal"><span class="pre">list(MyClass.select())</span></tt> to avoid
+ concurrent cursors if you have problems (using <tt class="literal"><span class="pre">list()</span></tt> will
+ pre-fetch all the results of a select).</p>
+ <p>Firebird support uses the <a class="reference" href="http://kinterbasdb.sourceforge.net/">kinterbasdb</a> Python library.</p>
</div>
<div class="section" id="dbmconnection">
Index: SQLObject.txt
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/SQLObject.txt,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** SQLObject.txt 21 Aug 2003 05:06:59 -0000 1.5
--- SQLObject.txt 1 Nov 2003 20:34:42 -0000 1.6
***************
*** 1,4 ****
```````````````
! SQLObject 0.4
```````````````
--- 1,4 ----
```````````````
! SQLObject 0.5
```````````````
***************
*** 43,49 ****
============
! Currently SQLObject supports MySQL, PostgreSQL (via ``psycopg``),
! SQLite, and a DBM-based store. The DBM backend is the youngest,
! and somewhat experimental.
Python 2.2 or higher is required. SQLObject makes extensive use of
--- 43,53 ----
============
! Currently SQLObject supports MySQL_, PostgreSQL_ (via ``psycopg``),
! SQLite_, Firebird_, and a DBM-based store. The DBM backend is
! experimental.
!
! .. _PostgreSQL: http://postgresql.org
! .. _SQLite: http://sqlite.org
! .. _Firebird: http://firebird.sourceforge.net
Python 2.2 or higher is required. SQLObject makes extensive use of
***************
*** 113,127 ****
Here are some things I plan:
! * More databases supported. SQL databases (like Oracle or Firebird)
! should be easy, non-SQL databases like Metakit should be possible.
* Better transaction support -- right now you can use transactions
for the database, but the object isn't transaction-aware, so
non-database persistence won't be able to be rolled back.
! Locking and other techniques to handle concurrency will also be
! implemented (probably in 0.5).
* Profile of SQLObject performance, so that I can identify bottlenecks.
! * Makes hooks with a validation and form generation package, so
! SQLObject classes (read: schemas) can be published for editing
! more directly and easily.
* Automatic joins in select queries.
* More kinds of joins, and more powerful join results (closer to how
--- 117,130 ----
Here are some things I plan:
! * More databases supported. There has been interest and some work in
! the progress for Oracle, Sybase, and MS-SQL support.
* Better transaction support -- right now you can use transactions
for the database, but the object isn't transaction-aware, so
non-database persistence won't be able to be rolled back.
! * Optimistic locking and other techniques to handle concurrency.
* Profile of SQLObject performance, so that I can identify bottlenecks.
! * Increase hooks with FormEncode (unreleased) validation and form
! generation package, so SQLObject classes (read: schemas) can be
! published for editing more directly and easily.
* Automatic joins in select queries.
* More kinds of joins, and more powerful join results (closer to how
***************
*** 138,142 ****
To begin with, let's make a database connection. Choose from one of
`MySQLConnection`, `PostgresConnection`, `SQLiteConnection`, and
! `DBMConnection`, depending on what database you use.
.. raw:: html
--- 141,145 ----
To begin with, let's make a database connection. Choose from one of
`MySQLConnection`, `PostgresConnection`, `SQLiteConnection`, and
! `FirebirdConnection`, depending on what database you use.
.. raw:: html
***************
*** 144,150 ****
The rest of this will be written more-or-less in a database-agnostic
! manner, using the connection you define. (Use `DBMConnection` if you
! don't have another database installed or ready -- it only uses
! standard Python modules, and writes to a directory)
We'll develop a simple addressbook-like database. We could create the
--- 147,155 ----
The rest of this will be written more-or-less in a database-agnostic
! manner, using the connection you define. Use `SQLite` if you don't
! have another database installed or ready -- it requires PySQLite_, but
! doesn't require a client/server setup.
!
! .. _PySQLite: http://pysqlite.sourceforge.net/
We'll develop a simple addressbook-like database. We could create the
***************
*** 166,174 ****
:file: ../examples/snippets/simpleaddress-schema-person1.html
! This is for MySQL. The schema for Postgres or SQLite looks a little
different (especially the ``id`` column). You'll notice the names
were changed from mixedCase to underscore_separated -- this is done by
! the `style object`_. There are a variety of ways to handle
! other names that are not as SQLObject expects (see `Irregular Naming`_).
.. _`style object`: `Changing the Naming Style`_
--- 171,179 ----
:file: ../examples/snippets/simpleaddress-schema-person1.html
! This is for MySQL. The schema for other databases looks slightly
different (especially the ``id`` column). You'll notice the names
were changed from mixedCase to underscore_separated -- this is done by
! the `style object`_. There are a variety of ways to handle that names
! that don't fit conventions (see `Irregular Naming`_).
.. _`style object`: `Changing the Naming Style`_
***************
*** 193,199 ****
as ``INT PRIMARY KEY AUTO_INCREMENT``, in Postgres ``SERIAL PRIMARY
KEY``, and in SQLite as ``INTEGER PRIMARY KEY``. You can `override the
! name`__, but some integer primary key must exist.
__ idName_
Using the Class
--- 198,206 ----
as ``INT PRIMARY KEY AUTO_INCREMENT``, in Postgres ``SERIAL PRIMARY
KEY``, and in SQLite as ``INTEGER PRIMARY KEY``. You can `override the
! name`__, but some integer primary key must exist (though `you can use
! non-integer keys`_ with some extra effort).
__ idName_
+ .. _`you can use non-integer keys`: `Non-Integer Keys`_
Using the Class
***************
*** 350,354 ****
:file: ../examples/snippets/person-select3.html
! You may wish to use `SQLBuilder.sqlRepr` to quote any values you use
if you use this technique (quoting is automatic if you use ``q``).
Tables given in `clauseTables` will be added to the ``FROM`` portion
--- 357,361 ----
:file: ../examples/snippets/person-select3.html
! You may wish to use `MyClass.sqlrepr` to quote any values you use
if you use this technique (quoting is automatic if you use ``q``).
Tables given in `clauseTables` will be added to the ``FROM`` portion
***************
*** 533,536 ****
--- 540,567 ----
different types of columns, when SQLObject creates your tables.
+ `BoolCol`:
+ Will create a ``BOOLEAN`` column in Postgres, or ``INT`` in other
+ databses. It will also convert values to ``"t"/"f"`` or ``0/1``
+ according to the database backend.
+ `CurrencyCol`:
+ Equivalent to ``DecimalCol(size=10, precision=2)``.
+ `DateTimeCol`:
+ A date and time (usually returned as an mxDateTime object).
+ `DecimalCol`:
+ Base-10, precise number. Uses the keyword arguments `size` for
+ number of digits stored, and `precision` for the number of digits
+ after the decimal point.
+ `EnumCol`:
+ One of several string values -- give the possible strings as a
+ list, with the `enumValues` keyword argument. MySQL has a native
+ ``ENUM`` type, but will work with other databases too (storage
+ just won't be as efficient).
+ `FloatCol`:
+ Floats.
+ `ForeignKey`:
+ A key to another table/class. Use like ``user =
+ ForeignKey('User')``.
+ `IntCol`:
+ Integers.
`StringCol`:
A string (character) column. Extra keywords:
***************
*** 543,566 ****
``CHAR`` and ``VARCHAR``, default True, i.e., use
``VARCHAR``.
- `IntCol`:
- Integers, real simple.
- `FloatCol`:
- Floats.
- `ForeignKey`:
- A key to another table/class. Use like ``user =
- ForeignKey('User')``.
- `EnumCol`:
- One of several string values -- give the possible strings as a
- list, with the `enumValues` keyword argument. MySQL has a native
- ``ENUM`` type, but will work with other databases too (storage
- just won't be as efficient).
- `DateTimeCol`:
- A date and time (usually returned as an mxDateTime object).
- `DecimalCol`:
- Base-10, precise number. Uses the keyword arguments `size` for
- number of digits stored, and `precision` for the number of digits
- after the decimal point.
- `CurrencyCol`:
- Equivalent to ``DecimalCol(size=10, precision=2)``.
SQLObject Class: Specifying Your Class
--- 574,577 ----
***************
*** 784,788 ****
columns will be added.
! *This is only supported in MySQL and Postgres*
Runtime Column Changes
--- 795,799 ----
columns will be added.
! *This is not supported in SQLite*
Runtime Column Changes
***************
*** 901,904 ****
--- 912,924 ----
column name.
+ Non-Integer Keys
+ ----------------
+
+ While not strictly a legacy database issue, this fits into the
+ category of "irregularities". If you use non-integer keys, all
+ primary key management is up to you. You must create the table
+ yourself, and when you create instances you must pass a ``id`` keyword
+ argument into ``new`` (like ``Person.new(id='555-55-5555', ...)``).
+
DBConnection: Database Connections
==================================
***************
*** 920,924 ****
MySQLConnection supports all the features, though MySQL does not
support transactions_ (except using a special proprietary backend that
! no one I've seen uses).
Postgres
--- 940,944 ----
MySQLConnection supports all the features, though MySQL does not
support transactions_ (except using a special proprietary backend that
! I haven't used).
Postgres
***************
*** 948,951 ****
--- 968,987 ----
SQLite may have concurrency issues, depending on your usage in a
multi-threaded environment.
+
+ Firebird
+ --------
+
+ `FirebirdConnection` takes the arguments `host`, `db`, `user` (default
+ ``"sysdba"``), `passwd` (default ``"masterkey"``).
+
+ Firebird supports all the features. Support is still young, so there
+ may be some issues, especially with concurrent access, and especially
+ using lazy selects. Try ``list(MyClass.select())`` to avoid
+ concurrent cursors if you have problems (using ``list()`` will
+ pre-fetch all the results of a select).
+
+ Firebird support uses the kinterbasdb_ Python library.
+
+ .. _kinterbasdb: http://kinterbasdb.sourceforge.net/
DBMConnection
Index: default.css
===================================================================
RCS file: /cvsroot/sqlobject/SOWeb/docs/default.css,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
|