我试图通过使用'Base.metadata.drop_all(bind = engine)'删除架构中的所有现有表,然后重新创建一个新表。但是,该表并没有像我所想的那样被删除,而是将记录追加到了旧表上。我是sqlalchemy的新手,谁能告诉我我在做什么错...谢谢!
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine("mysql+pymysql://root:pswd@127.0.0.1:3306/bond?charset=utf8", echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base(bind=engine)
Base.metadata.drop_all(bind=engine)
table = Table('TradeHistory', Base.metadata,
Column('Id', Integer, primary_key=True),
Column('trade_date', String(50)),
Column('rem_period', String(50)),
Column('bond_code', String(50)),
Column('bond_name', String(50)),
Column('bond_rating', String(50)),
Column('bond_yield', String(50)),
Column('note', String(50)),
Column('offer', String(50)),
Column('bid', String(50)),
Column('amount', String(50)))
Base.metadata.create_all(bind=engine)
conn.execute(table.insert(), listToWrite)
session.commit()
session.close()
Run Code Online (Sandbox Code Playgroud)
Base.metadata.drop_all(bind=engine)将删除它知道的所有表。
您将'TradeHistory'在该行之后定义表,这样就不会删除该表。
因此,首先定义整个数据模型(通常在单独的model模块btw中完成),然后执行诸如drop_all和的操作create_all。