sqlalchemy:'metadata.drop_all'不起作用

时间:2018-05-24 16:09:38

标签: python sqlalchemy

我尝试使用'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()

1 个答案:

答案 0 :(得分:1)

Base.metadata.drop_all(bind=engine)将删除知道的所有表格。

您正在该行之后定义表'TradeHistory',因此该表不会被删除。

因此,首先要定义整个数据模型(通常在单独的model模块中完成),然后执行drop_allcreate_all等操作。