我一直试图让一个名字小组与SQLalchemy合作,但无济于事.网络搜索并不是很有启发性,我是Python和SQLalchemy的新手,所以我不确定我是否在追逐风车: (基本的想法是我有一个命名元组,即:
Point=namedtuple('Point',['x','y'])
Run Code Online (Sandbox Code Playgroud)
如果我是正确的,它基本上创建一个类Point(元组).这首先工作正常,我可以创建如下对象:
p=Point(3,4)
Run Code Online (Sandbox Code Playgroud)
但是在我创建引擎等并调用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)
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会发生?有谁知道如何使用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)
Run Code Online (Sandbox Code Playgroud)
主要的想法是我想要一个可以轻松存储在数据库中的命名集合.所以这:
class Bunch:
__init__ = lambda self, **kw: setattr(self, '__dict__', kw)
Run Code Online (Sandbox Code Playgroud)
不会与sqlalchemy合作(我认为).我可以创建一个Bunch类,但我事先不知道我要在我的集合中存储多少个int ..我将在创建数据库之前设置它.我希望我有意义..