使用SQLAlchemy创建一个数据库,而不是每次程序运行时都重新创建它

时间:2016-12-02 14:24:32

标签: python database python-3.x sqlalchemy

我的程序用于购买和出售(假)股票的股票,然后将每笔交易添加到数据库。我正在使用SQLAlchemy来创建数据库和表,到目前为止它工作得很好。但是有一个相当大的问题:因为我在程序中创建表(并且我的程序不断循环),所以每次循环时都会重新创建表。

表:

class Wallet(Base):
    __tablename__ = 'wallets'

    id = Column(Integer, Sequence('wallet_id_seq'), primary_key=True)
    name = Column(String(50))
    balance = Column(Integer())

    def __repr__(self):
        return "<Wallet(name='%s', balance='%s')>" % (self.name, self.balance)

class Transaction(Base):
    __tablename__ = 'transactions'

    id = Column(Integer, Sequence('transaction_id_seq'), primary_key=True)
    stock = Column(String(50))
    symbol = Column(String(50))
    buy_or_sell = Column(String(50))
    price = Column(Integer())
    ema = Column(Integer())
    shares = Column(Integer())
    time = Column(String(50))

    def __repr__(self):
        return "<Transaction(stock='%s', symbol='%s', buy_or_sell='%s', price='%s', ema='%s', shares='%s', time='%s')>" % (self.stock, self.symbol, self.buy_or_sell, self.price, self.ema, self.shares, self.time)

我尝试将表重新定位到另一个Python文件并导入它们,这样我就可以反复循环主程序而无需重新创建它们。

bin/
    main.py
    databases.py
    __init__.py

但问题仍然存在。我猜这是因为每次导入类WalletTransaction时都会重新创建表。或者也许只是数据库create_all函数(Base.metadata.create_all(engine))仍在main.py中并在每个循环上运行。

如何创建数据库一次,然后每次main.py运行时更新其行/列?

1 个答案:

答案 0 :(得分:1)

感谢Jonas回答我的问题。通过在临时内存中创建数据库,每次循环都会删除它。解决方案是使用实际文件。