我一直试图让一个命名元组与 SQLalchemy 一起工作,但无济于事.. 网络搜索并不是很有启发性,而且我是 Python 和 SQLalchemy 的新手,所以我不确定我是否在追逐风车: (基本思想是我有一个命名元组,即:
Point=namedtuple('Point',['x','y'])
如果我是正确的,它基本上会创建一个类 Point(tuple) 。起初这很好用,我可以创建如下对象:
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)
任何想法为什么会发生这种情况?有谁知道如何使命名元组与 sqlalchemy 一起工作?当然我可以定义我自己的 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 类,但我不会事先知道我想在我的集合中存储多少个整数。我会在创建数据库之前设置它。我希望我是有道理的..