重写Flask炼金术中的表名

2024-10-01 11:35:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Flask应用程序并使用flaskalchemy访问MySQL数据库。在

我有以下类可以访问表:

class price_table(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    trans_id = db.Column(db.Integer)
    timestamp = db.Column(db.Integer)
    order_type = db.Column(db.String(25))
    price = db.Column(db.Numeric(15,8))
    quantity = db.Column(db.Numeric(25,8))
    def __repr__(self):
            return 'id'

对于“price_table”表,这个方法非常有效,但问题是我有几个表的列与“price_table”相同,我只知道运行时的名称。在

我想重用上面的类,这样我就可以把表名改为我需要读的表名,但这不起作用,程序继续读取'price table'

如何在运行时重写表名?在


Tags: id数据库应用程序flaskdbmodelmysqltable
2条回答

您应该使用:表名

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True)
    email = Column(String(120), unique=True)

http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/

根据jbub留下的评论,我找到了下面的解决方案,它可以根据需要完成任务。在

from app import db

def ClassFactory(name):
    tabledict={'id':db.Column(db.Integer, primary_key = True),
               'trans_id':db.Column(db.Integer),
               'timestamp':db.Column(db.Integer),
               'order_type':db.Column(db.String(25)),
               'price':db.Column(db.Numeric(25,8)),
               'quantity':db.Column(db.Numeric(25,8)),}

    newclass = type(name, (db.Model,), tabledict)
    return newclass

相关问题 更多 >