У меня есть пытался заставить именованный кортеж работать с SQLalchemy, но безрезультатно .. Веб-поиск не очень проясняет, и я новичок в Python и SQLalchemy, поэтому я не совсем уверен, гоняюсь ли я за ветряными мельницами :( основная идея состоит в том, что у меня есть именованный кортеж, то есть:
Point=namedtuple('Point',['x','y'])
который в основном создает класс Point (кортеж), если я прав. Сначала это работает нормально, и я могу создавать такие объекты, как:
p=Point(3,4)
Но после того, как я создам движок и т.д. и вызвать mapper, я не могу создавать больше объектов без этой ошибки:
Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
f=Point(3,4)
TypeError: __init__() takes exactly 1 argument (3 given)
Есть идеи, почему это происходит? Кто-нибудь знает, как заставить namedtuple работать с sqlalchemy? Конечно, я могу d уточнить мой собственный класс Point, но сейчас я одержим тем, чтобы заставить работать namedtuple .. Я использую Python 2.7, SQLalchemy 0.6.6 (механизм sqlite)
ПРИМЕР:
Я пытаюсь что-то вроде этого:
from sqlalchemy import *
from sqlalchemy.orm import *
from collections import namedtuple
Point=namedtuple('Point',['x','y'],verbose=True)
p=Point(3,4)
db=create_engine('sqlite:///pointtest.db')
metadata=MetaData()
pointxy=Table('pointxy',metadata,
Column('no',Integer,primary_key=True),
Column('x',Integer),
Column('y',Integer),
sqlite_autoincrement=True)
metadata.create_all(db)
m=mapper(Point, pointxy)
Session=sessionmaker(bind=db)
session=Session()
f=Point(3,4)
Основная идея состоит в том, что мне нужен именованный набор вещей, который можно легко сохранить в базе данных. Итак, это:
class Bunch:
__init__ = lambda self, **kw: setattr(self, '__dict__', kw)
не будет работать с sqlalchemy (я думаю). Я могу создать класс Bunch, но я не буду знать заранее, сколько целочисленных значений я хочу сохранить в своей коллекции ... Я установлю его до создания своей базы данных. Надеюсь, я понимаю ..