2016-12-02 68 views
0

我的程序构建为购买和出售(假)股票股票,然后将每个交易添加到数据库。我使用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运行时更新其行/列?

+0

''create_all''本身不会删除现有的数据库。您所展示的代码不应执行您所描述的内容,请显示您的循环和其他相关的sqlalchemy调用。 –

+0

是我的完整代码位于https://github.com/Logicmn/PYX/blob/master/PYX.py – Logicman

+1

尝试使用实际文件而不是sqlite内存数据库。我怀疑由于某种原因,数据库在循环之间被删除。 –

回答

1

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

相关问题