@@ -108,22 +108,24 @@ <h1>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶
108
108
</ li >
109
109
< li > < p class ="first "> Cached join results.</ p >
110
110
</ li >
111
- < li > < p class ="first "> Invert tests isinstance(obj, (tuple, list)) to not isinstance(obj, basestr)
112
- to allow any iterable.</ p >
111
+ < li > < p class ="first "> Invert tests isinstance(obj, (tuple, list)) to not isinstance(obj,
112
+ basestr) to allow any iterable.</ p >
113
113
</ li >
114
114
< li > < p class ="first "> Always use .lazyIter().</ p >
115
115
</ li >
116
116
< li > < p class ="first "> Optimize Iteration.next() - use cursor.fetchmany().</ p >
117
117
</ li >
118
118
< li > < p class ="first "> Generators instead of loops (fetchall => fetchone).</ p >
119
119
</ li >
120
- < li > < p class ="first "> Cache columns in sqlmeta.getColumns(); reset the cache on add/del Column/Join.</ p >
120
+ < li > < p class ="first "> Cache columns in sqlmeta.getColumns(); reset the cache on add/del
121
+ Column/Join.</ p >
121
122
</ li >
122
123
< li > < p class ="first "> Make ConnectionHub a context manager instead of .doInTransaction().</ p >
123
124
</ li >
124
125
< li > < p class ="first "> Make version_info a namedtuple.</ p >
125
126
</ li >
126
- < li > < p class ="first "> Expression columns - in SELECT but not in INSERT/UPDATE. Something like this:</ p >
127
+ < li > < p class ="first "> Expression columns - in SELECT but not in INSERT/UPDATE. Something like
128
+ this:</ p >
127
129
< div class ="highlight-default "> < div class ="highlight "> < pre > < span > </ span > < span class ="k "> class</ span > < span class ="nc "> MyClass</ span > < span class ="p "> (</ span > < span class ="n "> SQLObject</ span > < span class ="p "> ):</ span >
128
130
< span class ="n "> function1</ span > < span class ="o "> =</ span > < span class ="n "> ExpressionCol</ span > < span class ="p "> (</ span > < span class ="n "> func</ span > < span class ="o "> .</ span > < span class ="n "> my_function</ span > < span class ="p "> (</ span > < span class ="n "> MyClass</ span > < span class ="o "> .</ span > < span class ="n "> q</ span > < span class ="o "> .</ span > < span class ="n "> col1</ span > < span class ="p "> ))</ span >
129
131
< span class ="n "> function2</ span > < span class ="o "> =</ span > < span class ="n "> ExpressionCol</ span > < span class ="p "> (</ span > < span class ="s1 "> 'sum(col2)'</ span > < span class ="p "> )</ span >
@@ -140,30 +142,32 @@ <h1>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶
140
142
</ li >
141
143
< li > < p class ="first "> PREPARE/EXECUTE.</ p >
142
144
</ li >
143
- < li > < p class ="first "> Protect all .encode(), catch UnicodeEncode exceptions and reraise Invalid.</ p >
145
+ < li > < p class ="first "> Protect all .encode(), catch UnicodeEncode exceptions and reraise
146
+ Invalid.</ p >
144
147
</ li >
145
148
< li > < p class ="first "> More kinds of joins, and more powerful join results (closer to how
146
149
< cite > select</ cite > works).</ p >
147
150
</ li >
148
- < li > < p class ="first "> Better joins - automatic joins in .select()
149
- based on ForeignKey/MultipleJoin/RelatedJoin.</ p >
151
+ < li > < p class ="first "> Better joins - automatic joins in .select() based on
152
+ ForeignKey/MultipleJoin/RelatedJoin.</ p >
150
153
</ li >
151
154
< li > < p class ="first "> Deprecate, then remove connectionForOldURI.</ p >
152
155
</ li >
153
156
< li > < p class ="first "> Switch from setuptools to distribute.</ p >
154
157
</ li >
155
- < li > < p class ="first "> Ultramysql < a class ="reference external " href ="https://github.com/esnme/ultramysql "> for Python2</ a > and
156
- < a class ="reference external " href ="https://github.com/arpitbbhayani/umysql3 "> Python3</ a > . See also < a class ="reference external " href ="https://github.com/hongqn/umysqldb "> umysqldb</ a > .</ p >
158
+ < li > < p class ="first "> < a class ="reference external " href ="https://pypi.python.org/pypi/pg8000 "> pg8000 driver</ a > .</ p >
157
159
</ li >
158
- < li > < p class ="first "> pg8000 driver: < a class ="reference external " href ="http ://code.google.com/p/pg8000/ " > http://code.google.com/p/pg8000/ </ a > </ p >
160
+ < li > < p class ="first "> < a class ="reference external " href ="https ://pypi.python.org/pypi/py-postgresql " > py-postgresql driver </ a > . </ p >
159
161
</ li >
160
- < li > < p class ="first "> py-postgresql driver: < a class ="reference external " href ="http ://python.projects.postgresql. org/" > http://python.projects.postgresql.org/ </ a > </ p >
162
+ < li > < p class ="first "> < a class ="reference external " href ="https ://pypi. python.org/pypi/firebirdsql " > pyfirebirdsql </ a > . </ p >
161
163
</ li >
162
- < li > < p class ="first "> pyfirebirdsql: < a class ="reference external " href ="https://github.com/nakagami/pyfirebirdsql "> https://github.com/nakagami/pyfirebirdsql</ a > </ p >
164
+ < li > < p class ="first "> < a class ="reference external " href ="https://pypi.python.org/pypi/dbms "> dbms</ a > is a DB API wrapper for DB
165
+ API drivers for IBM DB2, Firebird, MSSQL Server, MySQL, Oracle,
166
+ PostgreSQL, SQLite and ODBC.</ p >
163
167
</ li >
164
- < li > < p class ="first "> dict API: use getitem interface for column access instead of getattr; reserve
165
- getattr for internal attributes only; this helps to avoid collisions with
166
- internal attributes.</ p >
168
+ < li > < p class ="first "> dict API: use getitem interface for column access instead of getattr;
169
+ reserve getattr for internal attributes only; this helps to avoid
170
+ collisions with internal attributes.</ p >
167
171
</ li >
168
172
< li > < p class ="first "> Or move column values access to a separate namespace, e.g. .c:
169
173
row.c.column.</ p >
@@ -172,18 +176,18 @@ <h1>TODO<a class="headerlink" href="#todo" title="Permalink to this headline">¶
172
176
</ li >
173
177
< li > < p class ="first "> RSS 2.0 and Atom news feeds.</ p >
174
178
</ li >
175
- < li > < p class ="first "> Use < a class ="reference external " href ="http ://www.webwareforpython .org/DBUtils "> DBUtils</ a > , especially SolidConnection.</ p >
179
+ < li > < p class ="first "> Use < a class ="reference external " href ="https ://pypi.python .org/pypi /DBUtils "> DBUtils</ a > , especially SolidConnection.</ p >
176
180
</ li >
177
181
</ ul >
178
182
< ul class ="simple ">
179
- < li > < code class ="docutils literal "> < span class ="pre "> _fromDatabase</ span > </ code > currently doesn’t support IDs that don’t fit into
180
- the normal naming scheme. It should do so. You can still use
181
- < code class =" docutils literal " > < span class =" pre " > _idName </ span > </ code > with < code class ="docutils literal "> < span class ="pre "> _fromDatabase</ span > </ code > .</ li >
182
- < li > More databases supported. There has been interest and some work in
183
- the progress for Oracle. IWBN to have Informix and DB2 drivers.</ li >
184
- < li > Better transaction support – right now you can use transactions
185
- for the database, but objects aren’t transaction-aware, so
186
- non-database persistence won’t be able to be rolled back.</ li >
183
+ < li > < code class ="docutils literal "> < span class ="pre "> _fromDatabase</ span > </ code > currently doesn’t support IDs that don’t fit into the
184
+ normal naming scheme. It should do so. You can still use < code class =" docutils literal " > < span class =" pre " > _idName </ span > </ code >
185
+ with < code class ="docutils literal "> < span class ="pre "> _fromDatabase</ span > </ code > .</ li >
186
+ < li > More databases supported. There has been interest and some work in the
187
+ progress for Oracle. IWBN to have Informix and DB2 drivers.</ li >
188
+ < li > Better transaction support – right now you can use transactions for the
189
+ database, but objects aren’t transaction-aware, so non-database
190
+ persistence won’t be able to be rolled back.</ li >
187
191
< li > Optimistic locking and other techniques to handle concurrency.</ li >
188
192
< li > Profile of SQLObject performance to identify bottlenecks.</ li >
189
193
< li > Increase hooks with FormEncode validation and form generation package, so
0 commit comments