Создание и повторное использование базы данных SQLAlchamy - PullRequest
0 голосов
/ 04 марта 2012

Есть кое-что, что я пытаюсь понять с помощью SQLAlchamy из его документации и учебных пособий.

Я вижу, как автоматически загружать классы из таблицы БД, и я вижу, как спроектировать класс и создать из него (декларативно или с помощью mapper ()) таблицу, которая добавляется в БД.

У меня вопрос как написать один код, который создает таблицу (например, при первом запуске), а затем использует ее ?

Я не хочу, чтобысоздайте базу данных одним инструментом или одним фрагментом кода и используйте отдельный код для использования базы данных.

Заранее спасибо, Питер

Ответы [ 2 ]

1 голос
/ 04 марта 2012

create_all() ничего не делает, если таблица уже существует, поэтому просто вызовите ее, как только вы настроите свой двигатель или соединение.

(Обратите внимание, что если вы измените вашсхема таблицы, create_all() будет не обновлять ее! Поэтому вам все еще нужна "другая программа" для этого.)

Это обычный шаблон:

def createEngine(metadata, dsn, **args):
    engine  = create_engine(dsn, **args)
    metadata.create_all(engine)
    return engine

def doStuff(engine):
    res = engine.execute('select * from mytable')
    # etc etc

def main():
    engine = createEngine(metadata, 'sqlite:///:memory:')
    doStuff(engine)

if __name__=='__main__':
    main()
0 голосов
/ 04 марта 2012

Я думаю, вы, возможно, слишком обдумываете ситуацию. Если вы хотите создать базу данных заново, вы обычно просто вызываете Base.metadata.create_all() или эквивалентный, и если вы не хотите этого делать, вы не вызываете ее.

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

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

Каждая другая часть вашего приложения должна работать одинаково независимо от того, выполняете ли вы создание БД или нет.

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