#python #sqlalchemy #schema #refresh
Вопрос:
Я создаю класс для существующих таблиц базы данных, чтобы использовать сопоставление в SQLAlchemy
def __init__(self, Server, Database, automap = False, tables = None):
self.DRIVER = '{SQL Server Native Client 11.0}'
self.SERVERNAME = Server
self.DATABASE = Database
self.conn_str = (
r'Driver=' self.DRIVER ';'
r'Server=' self.SERVERNAME ';'
r'Database=' self.DATABASE ';'
r'Trusted_Connection=yes;'
)
self.pyodbc = pyodbc.connect(self.conn_str)
self.sqlalchemy_engine = sqla.create_engine("mssql pyodbc:///?odbc_connect=%s" % urllib.parse.quote_plus(self.conn_str)) #, echo=True)
self.Session = sessionmaker(bind=self.sqlalchemy_engine, autoflush=True)
self.session = self.Session()
self.metadata = MetaData()
if self.DATABASE == 'ACQ_RH_EXP':
if tables != None:
self.metadata.reflect(bind=self.sqlalchemy_engine, only=tables)
else:
self.metadata.reflect(bind=self.sqlalchemy_engine)
else:
schemas = {'Admin','dbo'}
for s in schemas:
self.metadata.reflect(bind=self.sqlalchemy_engine, schema=s)
self.Base = automap_base(metadata = self.metadata)
self.Base.prepare()
Кажется, это работает в том смысле, что я могу видеть все свои таблицы, но нет метаданных и никакой видимой информации о схеме, хотя я могу ссылаться на
vulcan.metadata.tables['Admin.ACQ_GEOLOGY_Q']
Мой вопрос таков:
- Правильно ли я создаю SQLAlchemy?
- Если я обновлю таблицу в своей базе данных, добавив поле, как мне затем «Обновить» классы SQLAlchemy, чтобы они содержали новый столбец таблицы.
В настоящее время я повторяю сопоставление, но, похоже, он не находит новый столбец
for s in schemas:
vulcan.metadata.reflect(bind=vulcan.sqlalchemy_engine, schema=s)
vulcan.Base = automap_base(metadata = vulcan.metadata)
vulcan.Base.prepare()
С уважением