1

我正在创建一个 Flask 应用程序并使用 Flask-Alchemy 访问 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”具有相同的列,我只知道运行时的名称。

我想重用上面的类,所以我想我可以将tablename更改为我需要读取的表的名称,但这不起作用,程序一直在读取“price-table”

如何在运行时覆盖表名?

4

3 回答 3

9

你应该使用__tablename__

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/

于 2017-07-15T20:08:09.770 回答
0

根据 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
于 2013-11-06T08:57:51.920 回答
0

您可以覆盖price_table。table .name属性,但请记住,它会影响您的 price_table 模型,因此,除非您想使用它在数据库中创建该表的新专用版本并且您没有与 price_table 模型交互 - 我不会推荐那。

于 2022-02-11T14:01:35.010 回答