From b47f8237d870db695fd80869263ac7336e80b12f Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 10 Oct 2009 19:28:18 +0000 Subject: [PATCH] export UPPERCASE types as "from sqlalchemy.dialects. import VARCHAR, TEXT, INET, ..." --- doc/build/reference/sqlalchemy/types.rst | 35 +++++++++++++------ lib/sqlalchemy/dialects/firebird/__init__.py | 13 ++++++- lib/sqlalchemy/dialects/mssql/__init__.py | 16 +++++++++ lib/sqlalchemy/dialects/mysql/__init__.py | 15 +++++++- lib/sqlalchemy/dialects/oracle/__init__.py | 12 +++++++ .../dialects/postgresql/__init__.py | 13 ++++++- lib/sqlalchemy/dialects/postgresql/base.py | 4 +-- lib/sqlalchemy/dialects/sqlite/__init__.py | 12 ++++++- 8 files changed, 104 insertions(+), 16 deletions(-) diff --git a/doc/build/reference/sqlalchemy/types.rst b/doc/build/reference/sqlalchemy/types.rst index 06bda1787c..bddc2e5882 100644 --- a/doc/build/reference/sqlalchemy/types.rst +++ b/doc/build/reference/sqlalchemy/types.rst @@ -153,7 +153,7 @@ reference for the database you're interested in. For example, MySQL has a ``BIGINTEGER`` type and PostgreSQL has an ``INET`` type. To use these, import them from the module explicitly:: - from sqlalchemy.dialect.mysql import dialect as mysql + from sqlalchemy.dialects import mysql table = Table('foo', meta, Column('id', mysql.BIGINTEGER), @@ -162,27 +162,42 @@ For example, MySQL has a ``BIGINTEGER`` type and PostgreSQL has an Or some PostgreSQL types:: - from sqlalchemy.dialect.postgresql import dialect as postgresql + from sqlalchemy.dialects import postgresql table = Table('foo', meta, Column('ipaddress', postgresql.INET), Column('elements', postgresql.ARRAY(str)) ) -Each dialect should provide the full set of typenames supported by -that backend, so that a backend-specific schema can be created without -the need to locate types:: +Each dialect provides the full set of typenames supported by +that backend within its `__all__` collection, so that a simple +`import *` or similar will import all supported types as +implemented for that backend:: - from sqlalchemy.dialects.postgresql import dialect as pg + from sqlalchemy.dialects.postgresql import * t = Table('mytable', metadata, - Column('id', pg.INTEGER, primary_key=True), - Column('name', pg.VARCHAR(300)), - Column('inetaddr', pg.INET) + Column('id', INTEGER, primary_key=True), + Column('name', VARCHAR(300)), + Column('inetaddr', INET) ) Where above, the INTEGER and VARCHAR types are ultimately from -sqlalchemy.types, but the Postgresql dialect makes them available. +sqlalchemy.types, and INET is specific to the Postgresql dialect. + +Some dialect level types have the same name as the SQL standard type, +but also provide additional arguments. For example, MySQL implements +the full range of character and string types including additional arguments +such as `collation` and `charset`:: + + from sqlalchemy.dialects.mysql import VARCHAR, TEXT + + table = Table('foo', meta, + Column('col1', VARCHAR(200, collation='binary')), + Column('col2', TEXT(charset='latin1')) + ) + + Custom Types ------------ diff --git a/lib/sqlalchemy/dialects/firebird/__init__.py b/lib/sqlalchemy/dialects/firebird/__init__.py index 6b1b80db21..c108388da4 100644 --- a/lib/sqlalchemy/dialects/firebird/__init__.py +++ b/lib/sqlalchemy/dialects/firebird/__init__.py @@ -1,3 +1,14 @@ from sqlalchemy.dialects.firebird import base, kinterbasdb -base.dialect = kinterbasdb.dialect \ No newline at end of file +base.dialect = kinterbasdb.dialect + +from sqlalchemy.dialects.firebird.base import \ + SMALLINT, BIGINT, FLOAT, FLOAT, DATE, TIME, \ + TEXT, NUMERIC, FLOAT, TIMESTAMP, VARCHAR, CHAR, BLOB + +__all__ = ( + 'SMALLINT', 'BIGINT', 'FLOAT', 'FLOAT', 'DATE', 'TIME', + 'TEXT', 'NUMERIC', 'FLOAT', 'TIMESTAMP', 'VARCHAR', 'CHAR', 'BLOB' +) + + diff --git a/lib/sqlalchemy/dialects/mssql/__init__.py b/lib/sqlalchemy/dialects/mssql/__init__.py index 292320568d..c723249cb2 100644 --- a/lib/sqlalchemy/dialects/mssql/__init__.py +++ b/lib/sqlalchemy/dialects/mssql/__init__.py @@ -1,3 +1,19 @@ from sqlalchemy.dialects.mssql import base, pyodbc, adodbapi, pymssql, zxjdbc base.dialect = pyodbc.dialect + +from sqlalchemy.dialects.mssql.base import \ + INTEGER, BIGINT, SMALLINT, TINYINT, VARCHAR, NVARCHAR, CHAR, \ + NCHAR, TEXT, NTEXT, DECIMAL, NUMERIC, FLOAT, DATETIME,\ + DATETIME2, DATETIMEOFFSET, DATE, TIME, SMALLDATETIME, \ + BINARY, VARBINARY, BIT, REAL, IMAGE, TIMESTAMP,\ + MONEY, SMALLMONEY, UNIQUEIDENTIFIER, SQL_VARIANT + + +__all__ = ( + 'INTEGER', 'BIGINT', 'SMALLINT', 'TINYINT', 'VARCHAR', 'NVARCHAR', 'CHAR', + 'NCHAR', 'TEXT', 'NTEXT', 'DECIMAL', 'NUMERIC', 'FLOAT', 'DATETIME', + 'DATETIME2', 'DATETIMEOFFSET', 'DATE', 'TIME', 'SMALLDATETIME', + 'BINARY', 'VARBINARY', 'BIT', 'REAL', 'IMAGE', 'TIMESTAMP', + 'MONEY', 'SMALLMONEY', 'UNIQUEIDENTIFIER', 'SQL_VARIANT' +) \ No newline at end of file diff --git a/lib/sqlalchemy/dialects/mysql/__init__.py b/lib/sqlalchemy/dialects/mysql/__init__.py index 4106a299be..fbd238b1a6 100644 --- a/lib/sqlalchemy/dialects/mysql/__init__.py +++ b/lib/sqlalchemy/dialects/mysql/__init__.py @@ -1,4 +1,17 @@ from sqlalchemy.dialects.mysql import base, mysqldb, pyodbc, zxjdbc # default dialect -base.dialect = mysqldb.dialect \ No newline at end of file +base.dialect = mysqldb.dialect + +from sqlalchemy.dialects.mysql.base import \ + BIGINT, BINARY, BIT, BLOB, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL, DOUBLE, ENUM, \ + DECIMAL, FLOAT, INTEGER, INTEGER, LONGBLOB, LONGTEXT, MEDIUMBLOB, MEDIUMINT, MEDIUMTEXT, NCHAR, \ + NVARCHAR, NUMERIC, SET, SMALLINT, TEXT, TIME, TIMESTAMP, TINYBLOB, \ + TINYINT, TINYTEXT, VARBINARY, VARCHAR, YEAR + +__all__ = ( +'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'DOUBLE', 'ENUM', +'DECIMAL', 'FLOAT', 'INTEGER', 'INTEGER', 'LONGBLOB', 'LONGTEXT', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'NCHAR', +'NVARCHAR', 'NUMERIC', 'SET', 'SMALLINT', 'TEXT', 'TIME', 'TIMESTAMP', 'TINYBLOB', +'TINYINT', 'TINYTEXT', 'VARBINARY', 'VARCHAR', 'YEAR' +) diff --git a/lib/sqlalchemy/dialects/oracle/__init__.py b/lib/sqlalchemy/dialects/oracle/__init__.py index 3b4379ab70..a3bba14527 100644 --- a/lib/sqlalchemy/dialects/oracle/__init__.py +++ b/lib/sqlalchemy/dialects/oracle/__init__.py @@ -1,3 +1,15 @@ from sqlalchemy.dialects.oracle import base, cx_oracle, zxjdbc base.dialect = cx_oracle.dialect + +from sqlalchemy.dialects.oracle.base import \ + VARCHAR, NVARCHAR, CHAR, DATE, DATETIME, NUMBER,\ + BLOB, BFILE, CLOB, NCLOB, TIMESTAMP, RAW,\ + FLOAT, DOUBLE_PRECISION, LONG + + +__all__ = ( +'VARCHAR', 'NVARCHAR', 'CHAR', 'DATE', 'DATETIME', 'NUMBER', +'BLOB', 'BFILE', 'CLOB', 'NCLOB', 'TIMESTAMP', 'RAW', +'FLOAT', 'DOUBLE_PRECISION', 'LONG' +) diff --git a/lib/sqlalchemy/dialects/postgresql/__init__.py b/lib/sqlalchemy/dialects/postgresql/__init__.py index af9430a2b0..045fba2537 100644 --- a/lib/sqlalchemy/dialects/postgresql/__init__.py +++ b/lib/sqlalchemy/dialects/postgresql/__init__.py @@ -1,3 +1,14 @@ from sqlalchemy.dialects.postgresql import base, psycopg2, pg8000, zxjdbc -base.dialect = psycopg2.dialect \ No newline at end of file +base.dialect = psycopg2.dialect + +from sqlalchemy.dialects.postgresql.base import \ + INTEGER, BIGINT, SMALLINT, VARCHAR, CHAR, TEXT, NUMERIC, FLOAT, REAL, INET, \ + CIDR, UUID, BIT, MACADDR, DOUBLE_PRECISION, TIMESTAMP, TIME,\ + DATE, BYTEA, BOOLEAN, INTERVAL + +__all__ = ( +'INTEGER', 'BIGINT', 'SMALLINT', 'VARCHAR', 'CHAR', 'TEXT', 'NUMERIC', 'FLOAT', 'REAL', 'INET', +'CIDR', 'UUID', 'BIT', 'MACADDR', 'DOUBLE_PRECISION', 'TIMESTAMP', 'TIME', +'DATE', 'BYTEA', 'BOOLEAN', 'INTERVAL' +) \ No newline at end of file diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py index 78ea1a8fc3..19d9224e29 100644 --- a/lib/sqlalchemy/dialects/postgresql/base.py +++ b/lib/sqlalchemy/dialects/postgresql/base.py @@ -43,12 +43,12 @@ The dialect supports PG 8.3's ``INSERT..RETURNING`` and ``UPDATE..RETURNING`` sy but must be explicitly enabled on a per-statement basis:: # INSERT..RETURNING - result = table.insert(postgresql_returning=[table.c.col1, table.c.col2]).\\ + result = table.insert().returning(table.c.col1, table.c.col2).\\ values(name='foo') print result.fetchall() # UPDATE..RETURNING - result = table.update(postgresql_returning=[table.c.col1, table.c.col2]).\\ + result = table.update().returning(table.c.col1, table.c.col2).\\ where(table.c.name=='foo').values(name='bar') print result.fetchall() diff --git a/lib/sqlalchemy/dialects/sqlite/__init__.py b/lib/sqlalchemy/dialects/sqlite/__init__.py index 3cc08870f2..a3fd74f699 100644 --- a/lib/sqlalchemy/dialects/sqlite/__init__.py +++ b/lib/sqlalchemy/dialects/sqlite/__init__.py @@ -1,4 +1,14 @@ from sqlalchemy.dialects.sqlite import base, pysqlite # default dialect -base.dialect = pysqlite.dialect \ No newline at end of file +base.dialect = pysqlite.dialect + + +from sqlalchemy.dialects.sqlite.base import \ + BLOB, BOOLEAN, CHAR, DATE, DATETIME, DECIMAL, FLOAT, INTEGER,\ + NUMERIC, SMALLINT, TEXT, TIME, TIMESTAMP, VARCHAR + +__all__ = ( + 'BLOB', 'BOOLEAN', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'FLOAT', 'INTEGER', + 'NUMERIC', 'SMALLINT', 'TEXT', 'TIME', 'TIMESTAMP', 'VARCHAR', +) \ No newline at end of file -- 2.47.2