回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直试图让一个namedtuple与SQLalchemy一起工作,但是没有用。。网络搜索并不是很有启发性,而且我是Python和SQLalchemy的新手,所以我不太确定自己是不是在追逐风车:(基本的想法是我有一个名为dtuple,即:</p>
<pre><code>Point=namedtuple('Point',['x','y'])
</code></pre>
<p>它基本上创建了一个类点(tuple),如果我是正确的。一开始效果很好,我可以创建如下对象:</p>
^{pr2}$
<p>但是在我创建引擎etc并调用mapper之后,我无法创建更多的对象而不会出现以下错误:</p>
<pre><code>Traceback (most recent call last):
File "<pyshell#62>", line 1, in <module>
f=Point(3,4)
TypeError: __init__() takes exactly 1 argument (3 given)
</code></pre>
<p>你知道为什么会这样吗?有人知道如何使用sqlalchemy让namedtuple工作吗?当然,我可以定义我自己的Point类,但我现在正沉迷于让namedtuple工作。。
我使用的是python2.7,SQLalchemy 0.6.6(sqlite引擎)</p>
<p>示例:</p>
<p>我在尝试这样的事情:</p>
<pre><code>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)
</code></pre>
<p>主要的想法是我想要一个可以很容易地存储在数据库中的命名集合。所以这个:</p>
<pre><code>class Bunch:
__init__ = lambda self, **kw: setattr(self, '__dict__', kw)
</code></pre>
<p>不会和sqlalchemy一起工作(我想)。我可以创建一个Bunch类,但我事先不知道要在我的集合中存储多少个int。。我会在创建数据库之前设置它。我希望我说得通。。在</p>