Sqlalchemy drop_all(engine) Oracle sequence is not dropped

时间:2015-05-04 19:56:20

标签: python oracle sqlalchemy

With Python + Sqlalchemy + Oracle, trying to drop all tables and recreate them. Using oracle sequence in Id column for autoincreament,but drop all is not dropping sequence.

engine = create_engine('oracle://user:pass@host:port/db', 
                   implicit_returning=False, 
                   echo=False)

Base = declarative_base(bind=engine)

if DROP_AND_CREATE:
    Base.metadata.drop_all(bind=engine)

meta_data = MetaData()
meta_data = Base.metadata

from domains import users

meta_data.create_all(engine, checkfirst=False)

domain package sample,

class Users(Base):

__tablename__ = 'users'

id = Column(Integer, Sequence('users_id_seq'), primary_key=True)
name = Column(String(255))

in the above all tables are dropped except I can see the sequences I am using are still present in oracle db. if i manually delete them and run again they are running fine.

The user_id_seq created in oracle is not getting dropped. please help.

Error message:

sqlalchemy.exc.DatabaseError: (cx_Oracle.DatabaseError) ORA-00955: name is already used by an existing object
 [SQL: 'CREATE SEQUENCE user_queries_id_seq']

1 个答案:

答案 0 :(得分:0)

最后经过几个小时的谷歌搜索......仍在学习语言和框架。但是这段代码可以正常运行,并且完全符合我的应用......

全部谢谢

Base = declarative_base(bind=engine)

from domains import users

if DROP_AND_CREATE:
    Base.metadata.drop_all(bind=engine, checkfirst=True)

logger.info('Creating all registered tables.')
Base.metadata.create_all(bind=engine, checkfirst=True)