首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列类型为BigInteger的column.copy()上的SqlAlchemy-migrate中出现奇怪错误。

列类型为BigInteger的column.copy()上的SqlAlchemy-migrate中出现奇怪错误。
EN

Stack Overflow用户
提问于 2012-12-10 20:36:30
回答 1查看 544关注 0票数 0

情况稍微简单了一点。我有两个sqlalchemy-migrate的迁移文件:

First中,我创建了表volume_usage_cache,然后自动加载它,创建它的列的副本并打印它:

代码语言:javascript
复制
from sqlalchemy import Column, DateTime
from sqlalchemy import Boolean, BigInteger, MetaData, Integer, String, Table

def upgrade(migrate_engine):

    meta = MetaData()
    meta.bind = migrate_engine

    # Create new table
    volume_usage_cache = Table('volume_usage_cache', meta,
        Column('deleted', Boolean(create_constraint=True, name=None)),
        Column('id', Integer(), primary_key=True, nullable=False),
        Column('curr_write_bytes', BigInteger(), default=0),
        mysql_engine='InnoDB',
        mysql_charset='utf8'
    )

    volume_usage_cache.create()
    volume_usage_cache = Table('volume_usage_cache', meta, autoload=True)
    columns = []
    [columns.append(column.copy()) for column in volume_usage_cache.columns]
    print columns

我得到了我所期望的日志:

代码语言:javascript
复制
[Column('deleted', Boolean(), table=None), Column('id', Integer(), table=None,
primary_key=True, nullable=False), Column('curr_write_bytes', BigInteger(), 
table=None, default=ColumnDefault(0))]

但如果我复制了Second迁移文件(在First之后运行)中的列:

代码语言:javascript
复制
from sqlalchemy import MetaData, String, Integer, Boolean, Table, Column, Index
def upgrade(migrate_engine):
    meta = MetaData()
    meta.bind = migrate_engine

    table = Table("volume_usage_cache", meta, autoload=True) 
    columns = []
    for column in table.columns:
        columns.append(column.copy())
    print columns

我得到了不同的结果:

代码语言:javascript
复制
[Column('deleted', INTEGER(), table=None, default=ColumnDefault(0)), 
Column(u'id', INTEGER(), table=None, primary_key=True, nullable=False), 
Column(u'curr_write_bytes', NullType(), table=None)]

为什么curr_write_bytes栏有NullType?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 22:47:42

有两个问题:

首先:在First文件中,我们使用的是已经包含所有需要类型的列的旧元数据,因此如果我们创建新的metadata实例,SqlAlchemy将从数据库中加载有关表的信息,并将获得与Second文件中相同的结果。

第二:在sqlAlchemy中不支持BigInteger列类型(在sqlite中)。而且Sqlite根本不支持列的类型。因此,我们可以创建具有列BigInteger的表(它将工作),但在自动加载后,这样的列的类型将自动转换为NullType。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13801085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档