def sqltype_to_stdtype(sqltype):
import sqlalchemy.types as sqltypes
if isinstance(sqltype, (sqltypes.VARCHAR, sqltypes.CHAR, sqltypes.TEXT, sqltypes.Enum, sqltypes.String)):
return _STRING_TYPE
if isinstance(sqltype, (sqltypes.DATETIME, sqltypes.DATE, sqltypes.TIME, sqltypes.TIMESTAMP)):
return _DATE_TYPE
if isinstance(sqltype, (sqltypes.INTEGER, sqltypes.BIGINT, sqltypes.SMALLINT, sqltypes.Integer)):
return _INTEGER_TYPE
if isinstance(sqltype, (sqltypes.REAL, sqltypes.DECIMAL, sqltypes.NUMERIC, sqltypes.FLOAT)):
return _DECIMAL_TYPE
if isinstance(sqltype, sqltypes.BOOLEAN):
return _BOOLEAN_TYPE
python类INTEGER的实例源码
def stdtype_to_sqltype(stdtype):
import sqlalchemy.types as sqltypes
if isinstance(stdtype, stdtypes.StringType):
return sqltypes.VARCHAR(length=stdtype.max_len) if 0 < stdtype.max_len < 65536 else sqltypes.TEXT()
if isinstance(stdtype, stdtypes.BoolType):
return sqltypes.BOOLEAN()
if isinstance(stdtype, stdtypes.DateType):
return sqltypes.DATE() if stdtype.only_date else sqltypes.TIMESTAMP()
if isinstance(stdtype, stdtypes.IntegerType):
return sqltypes.BIGINT() if stdtype.length > 11 else sqltypes.INTEGER()
if isinstance(stdtype, stdtypes.DecimalType):
return sqltypes.DECIMAL()
if isinstance(stdtype, stdtypes.ArrayType):
return sqltypes.ARRAY(item_type=stdtype.item_type)
def test_indexes_table(self):
simple_items = Table(
'simple_items', self.metadata,
Column('id', INTEGER),
Column('number', INTEGER),
Column('text', VARCHAR)
)
simple_items.indexes.add(Index('idx_number', simple_items.c.number))
simple_items.indexes.add(Index('idx_text_number', simple_items.c.text, simple_items.c.number, unique=True))
simple_items.indexes.add(Index('idx_text', simple_items.c.text, unique=True))
assert self.generate_code() == """\
# coding: utf-8
from sqlalchemy import Column, Index, Integer, MetaData, String, Table
metadata = MetaData()
t_simple_items = Table(
'simple_items', metadata,
Column('id', Integer),
Column('number', Integer, index=True),
Column('text', String, unique=True),
Index('idx_text_number', 'text', 'number', unique=True)
)
"""
def test_manytomany(self):
Table(
'simple_items', self.metadata,
Column('id', INTEGER, primary_key=True)
)
Table(
'simple_containers', self.metadata,
Column('id', INTEGER, primary_key=True)
)
Table(
'container_items', self.metadata,
Column('item_id', INTEGER),
Column('container_id', INTEGER),
ForeignKeyConstraint(['item_id'], ['simple_items.id']),
ForeignKeyConstraint(['container_id'], ['simple_containers.id'])
)
assert self.generate_code() == """\
# coding: utf-8
from sqlalchemy import Column, ForeignKey, Integer, Table
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
t_container_items = Table(
'container_items', metadata,
Column('item_id', ForeignKey('simple_items.id')),
Column('container_id', ForeignKey('simple_containers.id'))
)
class SimpleContainer(Base):
__tablename__ = 'simple_containers'
id = Column(Integer, primary_key=True)
items = relationship('SimpleItem', secondary='container_items')
class SimpleItem(Base):
__tablename__ = 'simple_items'
id = Column(Integer, primary_key=True)
"""
def test_manytomany_selfref(self):
Table(
'simple_items', self.metadata,
Column('id', INTEGER, primary_key=True)
)
Table(
'child_items', self.metadata,
Column('parent_id', INTEGER),
Column('child_id', INTEGER),
ForeignKeyConstraint(['parent_id'], ['simple_items.id']),
ForeignKeyConstraint(['child_id'], ['simple_items.id'])
)
assert self.generate_code() == """\
# coding: utf-8
from sqlalchemy import Column, ForeignKey, Integer, Table
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
t_child_items = Table(
'child_items', metadata,
Column('parent_id', ForeignKey('simple_items.id')),
Column('child_id', ForeignKey('simple_items.id'))
)
class SimpleItem(Base):
__tablename__ = 'simple_items'
id = Column(Integer, primary_key=True)
parents = relationship(
'SimpleItem',
secondary='child_items',
primaryjoin='SimpleItem.id == child_items.c.child_id',
secondaryjoin='SimpleItem.id == child_items.c.parent_id'
)
"""
def test_joined_inheritance(self):
Table(
'simple_sub_items', self.metadata,
Column('simple_items_id', INTEGER, primary_key=True),
Column('data3', INTEGER),
ForeignKeyConstraint(['simple_items_id'], ['simple_items.super_item_id'])
)
Table(
'simple_super_items', self.metadata,
Column('id', INTEGER, primary_key=True),
Column('data1', INTEGER)
)
Table(
'simple_items', self.metadata,
Column('super_item_id', INTEGER, primary_key=True),
Column('data2', INTEGER),
ForeignKeyConstraint(['super_item_id'], ['simple_super_items.id'])
)
assert self.generate_code() == """\
# coding: utf-8
from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class SimpleSuperItem(Base):
__tablename__ = 'simple_super_items'
id = Column(Integer, primary_key=True)
data1 = Column(Integer)
class SimpleItem(SimpleSuperItem):
__tablename__ = 'simple_items'
super_item_id = Column(ForeignKey('simple_super_items.id'), primary_key=True)
data2 = Column(Integer)
class SimpleSubItem(SimpleItem):
__tablename__ = 'simple_sub_items'
simple_items_id = Column(ForeignKey('simple_items.super_item_id'), primary_key=True)
data3 = Column(Integer)
"""
def test_table_args_kwargs(self):
simple_items = Table(
'simple_items', self.metadata,
Column('id', INTEGER, primary_key=True),
Column('name', VARCHAR),
schema='testschema'
)
simple_items.indexes.add(Index('testidx', simple_items.c.id, simple_items.c.name))
assert self.generate_code() == """\
# coding: utf-8
from sqlalchemy import Column, Index, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class SimpleItem(Base):
__tablename__ = 'simple_items'
__table_args__ = (
Index('testidx', 'id', 'name'),
{'schema': 'testschema'}
)
id = Column(Integer, primary_key=True)
name = Column(String)
"""