2014-01-16 2 views
5

Я вдруг начал видеть ошибку в моем приложении Python SQLAlchemy, и я не могу понять, что вызывает его. Мой код выглядит следующим образом:Ошибка в SQLAlchemy с Integer: «object() не принимает никаких параметров»

from sqlalchemy import create_engine 
from sqlalchemy import Column 
from sqlalchemy import ForeignKey 
from sqlalchemy import Integer 
from sqlalchemy import MetaData 
from sqlalchemy.ext.declarative import declarative_base 

def loadConnection(connection_string, echo=False): 
    engine = create_engine(connection_string, echo=echo) 
    Base = declarative_base(engine) 
    Session = sessionmaker(bind=engine) 
    session = Session() 
    return session, Base 

connection = yaml.load('connection.yaml') 
session, Base = loadConnection(connection['connection'], connection['echo']) 

class Foo(Base): 
    __tablename__ = 'foo' 
    id = Column(Integer(11), primary_key=True) 

И когда я запускаю этот сценарий, я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "ephem/database_interface.py", line 52, in <module> 
    class Foo(Base): 
    File "ephem/database_interface.py", line 54, in Foo 
    id = Column(Integer(11), primary_key=True) 
TypeError: object() takes no parameters 

Я использую SQLAlchemy 0.9.1. Мой сервер - это MySQL, работающий на локальном хосте. Насколько я могу судить по проверке с помощью pdb connection, session, Base, Column и Integer все выглядит нормально.

+2

Согласно [docs] (http://docs.sqlalchemy.org/en/rel_0_9/core/types.html#sqlalchemy.types.Integer), 'Integer' не принимает никаких аргументов. – alecxe

ответ

7

Integer не имеет параметров. Это изменение в версии 0.9.

Вместо этого существуют BigInteger и SmallInteger.

+3

Обратите внимание, что в версии 0.8 были приняты аргументы: [docs] (http://docs.sqlalchemy.org/en/rel_0_8/core/types.html#sqlalchemy.types.Integer). – alecxe

+0

^^^ @alecxe AH-HA! На этой неделе мне пришлось перестроить среду python. Держу пари, что меня повысили с 0,8 до 0,9 без меня! – ACV

+1

@ACV, да, поэтому лучше заморозить требования к проекту с точными версиями пакетов - кто знает, что изменится в ваших зависимостях. – alecxe

Смежные вопросы