sqlalchemy: «metadata.drop_all» не работает - PullRequest
0 голосов
/ 24 мая 2018

Я попытался удалить все существующие таблицы в схеме, используя 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 голосов
/ 24 мая 2018

Base.metadata.drop_all(bind=engine) удалит все таблицы, о которых знает о.

Вы определяете таблицу 'TradeHistory' после этой строки, так что таблица не будет удалена.

Итак, сначала определите всю модель данных (что обычно делается в отдельном модуле model), затем выполните такие операции, как drop_all и create_all.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...