首页 > 动态生成对象问题请教 (flask-sqlalchemy引出的python基本用法问题)

动态生成对象问题请教 (flask-sqlalchemy引出的python基本用法问题)

表太多了,由于考虑性能处理问题,使用动态配置来产生表,C,python可以保持表一致,crm部分python开发,后台应用c开发;所以写了例子,发现不行,部分代码及错误如下;请大侠们指教。

db = SQLAlchemy(app)
def gentable():
    model = type("CallSpeeddial", (db.Model,),{"__tablename__":"CallSpeeddial","id":"db.Column(db.Integer, primary_key=True)","speeddial":"db.Column(db.String(64),default='')"})
    return model
    
CallSpeeddial=gentable()
speeddial=CallSpeeddial(speeddial="1234")
db.session.add(speeddial)
db.session.commit() 

错误日志:
File "/opt/venv/local/lib/python2.7/site-packages/sqlalchemy/orm/mapper.py", line 1223, in _configure_pks

(self, self.mapped_table.description))

sqlalchemy.exc.ArgumentError: Mapper Mapper|CallSpeeddial|CallSpeeddial could not assemble any primary key columns for mapped table 'CallSpeeddial'


CallSpeeddial类定义的时候Column不能加引号吧…加了引号CallSpeeddial.id的属性就是字符串而不是db.Column对象了。

def gentable():
    model = type("CallSpeeddial", (db.Model,),{"__tablename__":"CallSpeeddial","id":db.Column(db.Integer, primary_key=True),"speeddial":db.Column(db.String(64),default='')})
    return model

这样应该可以了
至于报错的原因,如果CallSpeeddial里面所有属性都是字符串的话,SQLAlchemy在构建ORM时当然是找不到主键的。

【热门文章】
【热门文章】