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),
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
------------
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'
+)
+
+
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
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'
+)
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'
+)
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
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()
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