Cheetah 3.3.2
Hello!
I'm pleased to announce version 3.3.2, the 2nd bug-fix
of branch 3.3 of CheetahTemplate3.
What's new in CheetahTemplate3
==
The contributor for this release is nate.k. Thanks!
Bug fixes:
- Fixed printing to stdout in ``CheetahWrapper``.
CI:
- CI(GHActions): Install all Python and PyPy versions from ``conda-forge``.
What is CheetahTemplate3
Cheetah3 is a free and open source (MIT) Python template engine.
It's a fork of the original CheetahTemplate library.
Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
=
Site:
https://cheetahtemplate.org/
Download:
https://pypi.org/project/CT3/3.3.2
News and changes:
https://cheetahtemplate.org/news.html
StackOverflow:
https://stackoverflow.com/questions/tagged/cheetah
Mailing lists:
https://sourceforge.net/p/cheetahtemplate/mailman/
Development:
https://github.com/CheetahTemplate3
Developer Guide:
https://cheetahtemplate.org/dev_guide/
Example
===
Install::
$ pip install CT3 # (or even "ct3")
Below is a simple example of some Cheetah code, as you can see it's practically
Python. You can import, inherit and define methods just like in a regular Python
module, since that's what your Cheetah templates are compiled to :) ::
#from Cheetah.Template import Template
#extends Template
#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
'mood' : 'Sad'}, {'name' : 'Harry', 'mood' :
'Hairy'}]
How are you feeling?
#for $person in $people
$person['name'] is $person['mood']
#end for
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.10.2
Hello!
I'm pleased to announce version 3.10.2, a minor feature release
and the second bugfix release of branch 3.10 of SQLObject.
What's new in SQLObject
===
The contributor for this release is Igor Yudytskiy. Thanks!
Minor features
--
* Class ``Alias`` grows a method ``.select()`` to match ``SQLObject.select()``.
Bug fixes
-
* Fixed a bug in ``SQLRelatedJoin`` in the case where the table joins with
itself; in the resulting SQL two instances of the table must use different
aliases. Thanks to Igor Yudytskiy for providing an elaborated bug report.
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg2``, ``PyGreSQL``,
partially ``pg8000`` and ``py-postgresql``), SQLite (builtin ``sqlite``,
``pysqlite``, partially ``supersqlite``); connections to other backends
- Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB) - are less
debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.10.2a0.dev20221222/
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
Cheetah 3.3.3
Hello!
I'm pleased to announce version 3.3.3, the fourth release
of branch 3.3 of CheetahTemplate3.
What's new in CheetahTemplate3
==
Minor features:
- Protect ``import cgi`` in preparation to Python 3.13.
Tests:
- Run tests with Python 3.12.
CI:
- GHActions: Ensure ``pip`` only if needed
This is to work around a problem in conda with Python 3.7 -
it brings in wrong version of ``setuptools`` incompatible with Python 3.7.
What is CheetahTemplate3
Cheetah3 is a free and open source (MIT) Python template engine.
It's a fork of the original CheetahTemplate library.
Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
=
Site:
https://cheetahtemplate.org/
Download:
https://pypi.org/project/CT3/3.3.3
News and changes:
https://cheetahtemplate.org/news.html
StackOverflow:
https://stackoverflow.com/questions/tagged/cheetah
Mailing lists:
https://sourceforge.net/p/cheetahtemplate/mailman/
Development:
https://github.com/CheetahTemplate3
Developer Guide:
https://cheetahtemplate.org/dev_guide/
Example
===
Install::
$ pip install CT3 # (or even "ct3")
Below is a simple example of some Cheetah code, as you can see it's practically
Python. You can import, inherit and define methods just like in a regular Python
module, since that's what your Cheetah templates are compiled to :) ::
#from Cheetah.Template import Template
#extends Template
#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
'mood' : 'Sad'}, {'name' : 'Harry', 'mood' :
'Hairy'}]
How are you feeling?
#for $person in $people
$person['name'] is $person['mood']
#end for
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.10.3
Hello!
I'm pleased to announce version 3.10.3, the 3rd bugfix release of branch
3.10 of SQLObject.
What's new in SQLObject
===
The contributors for this release are
Igor Yudytskiy and shuffle (github.com/shuffleyxf).
Thanks!
Bug fixes
-
* Relaxed aliasing in ``SQLRelatedJoin`` introduced in 3.10.2 - aliasing
is required only when the table joins with itself. When there're two
tables to join aliasing prevents filtering -- wrong SQL is generated
in ``relJoinCol.filter(thisClass.q.column)``.
Drivers
---
* Fix(SQLiteConnection): Release connections from threads that are
no longer active. This fixes memory leak in multithreaded programs
in Windows.
``SQLite`` requires different connections per thread so
``SQLiteConnection`` creates and stores a connection per thread.
When a thread finishes its connections should be closed.
But if a program doesn't cooperate and doesn't close connections at
the end of a thread SQLObject leaks memory as connection objects are
stuck in ``SQLiteConnection``. On Linux the leak is negligible as
Linux reuses thread IDs so new connections replace old ones and old
connections are garbage collected. But Windows doesn't reuse thread
IDs so old connections pile and never released. To fix the problem
``SQLiteConnection`` now enumerates threads and releases connections
from non-existing threads.
* Dropped ``supersqlite``. It seems abandoned.
The last version 0.0.78 was released in 2018.
Tests
-
* Run tests with Python 3.12.
CI
--
* GHActions: Ensure ``pip`` only if needed
This is to work around a problem in conda with Python 3.7 -
it brings in wrong version of ``setuptools`` incompatible with Python 3.7.
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg2``, ``PyGreSQL``,
partially ``pg8000`` and ``py-postgresql``), SQLite (builtin ``sqlite``,
``pysqlite``); connections to other backends
- Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB) - are less
debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.10.3
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.11.0
Hello!
I'm pleased to announce version 3.11.0, the first stable release
of branch 3.11 of SQLObject.
What's new in SQLObject
===
Features
* Continue working on ``SQLRelatedJoin`` aliasing introduced in 3.10.2.
When a table joins with itself calling
``relJoinCol.filter(thisClass.q.column)`` raises ``ValueError``
hinting that an alias is required for filtering.
* Test that ``idType`` is either ``int`` or ``str``.
* Added ``sqlmeta.idSize``. This sets the size of integer column ``id``
for MySQL and PostgreSQL. Allowed values are ``'TINY'``, ``'SMALL'``,
``'MEDIUM'``, ``'BIG'``, ``None``; default is ``None``. For Postgres
mapped to ``smallserial``/``serial``/``bigserial``. For other backends
it's currently ignored. Feature request by Meet Gujrathi at
https://stackoverflow.com/q/77360075/7976758
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg2``, ``PyGreSQL``,
partially ``pg8000`` and ``py-postgresql``), SQLite (builtin ``sqlite``,
``pysqlite``); connections to other backends
- Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB) - are less
debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.11.0
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
Cheetah 3.3.3.post1
Hello!
I'm pleased to announce version 3.3.3.post1, the first post-release
of release 3.3.3 of branch 3.3 of CheetahTemplate3.
What's new in CheetahTemplate3
==
CI:
- GHActions: Build and publish wheels on Linux/aarch64.
What is CheetahTemplate3
Cheetah3 is a free and open source (MIT) Python template engine.
It's a fork of the original CheetahTemplate library.
Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
=
Site:
https://cheetahtemplate.org/
Download:
https://pypi.org/project/CT3/3.3.3.post1
News and changes:
https://cheetahtemplate.org/news.html
StackOverflow:
https://stackoverflow.com/questions/tagged/cheetah
Mailing lists:
https://sourceforge.net/p/cheetahtemplate/mailman/
Development:
https://github.com/CheetahTemplate3
Developer Guide:
https://cheetahtemplate.org/dev_guide/
Example
===
Install::
$ pip install CT3 # (or even "ct3")
Below is a simple example of some Cheetah code, as you can see it's practically
Python. You can import, inherit and define methods just like in a regular Python
module, since that's what your Cheetah templates are compiled to :) ::
#from Cheetah.Template import Template
#extends Template
#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
'mood' : 'Sad'}, {'name' : 'Harry', 'mood' :
'Hairy'}]
How are you feeling?
#for $person in $people
$person['name'] is $person['mood']
#end for
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
Cheetah 3.4.0
Hello!
I'm pleased to announce version 3.4.0, the final release
of branch 3.4 of CheetahTemplate3.
What's new in CheetahTemplate3
==
This release spans two topics: adapting to Python 3.13 and
fixes in import hooks.
Bug fixes:
- Fixed ``ImportHooks``: it must raise ``ModuleNotFoundError``
instead of ``ImportError``.
- Fixed absolute import in ``ImportHooks`` under Python 3.
- Use ``cache_from_source`` in ``ImportManager`` to find out
``.pyc``/``.pyo`` byte-code files.
- Fixed unmarshalling ``.pyc``/``.pyo`` byte-code files
in ``ImportManager``.
- Fixed ``Template.webInput``: Use ``urllib.parse.parse_qs``
instead of ``cgi.FieldStorage``; Python 3.13 dropped ``cgi``.
- Fixed ``_namemapper.c``: Silent an inadvertent ``TypeError`` exception
in ``PyMapping_HasKeyString`` under Python 3.13+
caused by ``_namemapper`` looking up a key in a non-dictionary.
- Fixed ``_namemapper.c``: Silence ``IndexError`` when testing
``name[attr]``. Some objects like ``re.MatchObject`` implement both
attribute access and index access. This confuses ``NameMapper`` because
it expects ``name[attr]`` to raise ``TypeError`` for objects that don't
implement mapping protocol.
- Fixed mapping test in ``NameMapper.py``:
Python 3.13 brough a new mapping type ``FrameLocalsProxy``.
- Fixed another ``RecursionError`` in ``ImportHooks`` under PyPy3.
Tests:
- tox: Run tests under Python 3.13.
CI:
- CI(GHActions): Switch to ``setup-miniconda``.
- CI(GHActions): Run tests under Python 3.13.
Build/release:
- Rename sdist to lowercase; different build tools produce different case.
This is important because stupid PyPI doesn't ignore sdists
in different cases but also doesn't allow uploading.
So we use single case, all lower. Also see PEP 625.
What is CheetahTemplate3
Cheetah3 is a free and open source (MIT) Python template engine.
It's a fork of the original CheetahTemplate library.
Python 2.7 or 3.4+ is required.
Where is CheetahTemplate3
=
Site:
https://cheetahtemplate.org/
Download:
https://pypi.org/project/CT3/3.4.0
News and changes:
https://cheetahtemplate.org/news.html
StackOverflow:
https://stackoverflow.com/questions/tagged/cheetah
Mailing lists:
https://sourceforge.net/p/cheetahtemplate/mailman/
Development:
https://github.com/CheetahTemplate3
Developer Guide:
https://cheetahtemplate.org/dev_guide/
Example
===
Install::
$ pip install CT3 # (or even "ct3")
Below is a simple example of some Cheetah code, as you can see it's practically
Python. You can import, inherit and define methods just like in a regular Python
module, since that's what your Cheetah templates are compiled to :) ::
#from Cheetah.Template import Template
#extends Template
#set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
'mood' : 'Sad'}, {'name' : 'Harry', 'mood' :
'Hairy'}]
How are you feeling?
#for $person in $people
$person['name'] is $person['mood']
#end for
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.12.0.post2
Hello!
I'm pleased to announce version 3.12.0.post2, the second post-release
of release 3.12.0 of branch 3.12 of SQLObject.
What's new in SQLObject
===
Installation/dependencies
-
* Use ``FormEncode`` 2.1.1 for Python 3.13.
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg2``, ``PyGreSQL``,
partially ``pg8000`` and ``py-postgresql``), SQLite (builtin ``sqlite3``);
connections to other backends
- Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB) - are less
debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.12.0.post2
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.12.0
Hello!
I'm pleased to announce version 3.12.0, the release of branch
3.12 of SQLObject.
What's new in SQLObject
===
Drivers
---
* Add support for CyMySQL; there're some problems with unicode yet.
* Separate ``psycopg`` and ``psycopg2``;
``psycopg`` is actually ``psycopg3`` now; not all tests pass.
* Minor fix in getting error code from PyGreSQL.
* Dropped ``oursql``. It wasn't updated in years.
* Dropped ``PySQLite2``. Only builtin ``sqlite3`` is supported.
Tests
-
* Run tests with Python 3.13.
* Run tests with ``psycopg-c``; not all tests pass.
* Fix ``test_exceptions.py`` under MariaDB, PostgreSQL and SQLite.
* ``py-postgres``: Set ``sslmode`` to ``allow``;
upstream changed default to ``prefer``.
CI
--
* Run tests with ``PyGreSQL`` on w32, do not ignore errors.
* Skip tests with ``pg8000`` on w32.
* GHActions: Switch to ``setup-miniconda``.
* GHActions: Python 3.13.
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg2``, ``PyGreSQL``,
partially ``pg8000`` and ``py-postgresql``), SQLite (builtin ``sqlite3``);
connections to other backends
- Firebird, Sybase, MSSQL and MaxDB (also known as SAPDB) - are less
debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.12.0
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
SQLObject 3.13.0
Hello!
I'm pleased to announce version 3.13.0, the first release of branch
3.13 of SQLObject.
What's new in SQLObject
===
Drivers
---
* Extended default list of MySQL drivers to ``mysqldb``, ``mysqlclient``,
``mysql-connector``, ``mysql-connector-python``, ``pymysql``.
* Extended default list of PostgreSQL drivers to ``psycopg``, ``psycopg2``,
``pygresql``, ``pg8000``.
* Fixed outstanding problems with ``psycopg``. It's now the first class driver.
* Fixed all problems with ``pg8000``. It's now the first class driver.
* Dropped support for ``CyMySQL``;
its author refused to fix unicode-related problems.
* Dropped support for ``py-postgresql``; it's completely broken
with debianized ``Postgres`` and the authors reject fixes.
Tests
-
* Added tests for ``mysqldb`` (aka ``mysql-python``)
and ``mysqlclient`` on w32.
* Improved tests of ``mysql-connector`` and ``mysql-connector-python``.
CI
--
* Tests(GHActions): Fixed old bugs in the workflow on w32.
* Run tests with ``psycopg[c]``.
For a more complete list, please see the news:
http://sqlobject.org/News.html
What is SQLObject
=
SQLObject is a free and open-source (LGPL) Python object-relational
mapper. Your database tables are described as classes, and rows are
instances of those classes. SQLObject is meant to be easy to use and
quick to get started with.
SQLObject supports a number of backends: MySQL/MariaDB (with a number of
DB API drivers: ``MySQLdb``, ``mysqlclient``, ``mysql-connector``,
``PyMySQL``, ``mariadb``), PostgreSQL (``psycopg``, ``psycopg2``, ``PyGreSQL``,
partially ``pg8000``), SQLite (builtin ``sqlite3``);
connections to other backends - Firebird, Sybase, MSSQL and MaxDB (also
known as SAPDB) - are less debugged).
Python 2.7 or 3.4+ is required.
Where is SQLObject
==
Site:
http://sqlobject.org
Download:
https://pypi.org/project/SQLObject/3.13.0
News and changes:
http://sqlobject.org/News.html
StackOverflow:
https://stackoverflow.com/questions/tagged/sqlobject
Mailing lists:
https://sourceforge.net/p/sqlobject/mailman/
Development:
http://sqlobject.org/devel/
Developer Guide:
http://sqlobject.org/DeveloperGuide.html
Example
===
Install::
$ pip install sqlobject
Create a simple class that wraps a table::
>>> from sqlobject import *
>>>
>>> sqlhub.processConnection = connectionForURI('sqlite:/:memory:')
>>>
>>> class Person(SQLObject):
... fname = StringCol()
... mi = StringCol(length=1, default=None)
... lname = StringCol()
...
>>> Person.createTable()
Use the object::
>>> p = Person(fname="John", lname="Doe")
>>> p
>>> p.fname
'John'
>>> p.mi = 'Q'
>>> p2 = Person.get(1)
>>> p2
>>> p is p2
True
Queries::
>>> p3 = Person.selectBy(lname="Doe")[0]
>>> p3
>>> pc = Person.select(Person.q.lname=="Doe").count()
>>> pc
1
Oleg.
--
Oleg Broytmanhttps://phdru.name/[email protected]
Programmers don't die, they just GOSUB without RETURN.
--
https://mail.python.org/mailman/listinfo/python-list
