Форум сайта python.su
den1024Каждый исполнитель по своему будет проверять. Обычно таблицы регистрируются в служебной таблице.
как проверять на существование таблицы в БД?
def has_table(self, tname): cur = self.db.cursor() cmd = "SELECT name FROM sqlite_master " \ "WHERE type = 'table';" tup = tuple(cur.execute(cmd)) return tup and tname in tup[0]
def has_table(self, tname): cur = self.db.cursor() cmd = "SHOW TABLES;" cur.execute(cmd) tup = tuple(i[0] for i in cur) return tname in tup
Офлайн
den1024А можете рассказать зачем вам это? И вообще, что вы изобретаете, почему не алхимия?
как проверять на существование таблицы в БД?
Офлайн
FishHook
Офлайн
py.user.next
Офлайн
den1024ОК, а зачем ваша программа проверяет существование таблицы БД?
Просто на текущий момент, можно сказать, изучаю python и пока не хочу лезть в дебри ORM.
Реализовываю слой хранилища для своего приложения. Да он чем-то напоминает ORM но с минимальным функционалом на текущий момент.
Офлайн
FishHook
Офлайн
То есть на каждый чих от логике вы собираетесь проверять существование таблицы?
Это же оверхед на ровном месте.
ОРМы так не делают. Вам нужно придумать механизм миграций (south migration) или что-то похожее примитивное (django syncdb). Ну или делать это один раз при старте программы.
Офлайн
FishHook
То есть на каждый чих от логике вы собираетесь проверять существование таблицы? Это же оверхед на ровном месте.ОРМы так не делают. Вам нужно придумать механизм миграций (south migration) или что-то похожее примитивное (django syncdb). Ну или делать это один раз при старте программы.
Офлайн
den1024Джанга, например, так не делает. Самому фреймворку глубоко наплевать, есть там таблицы или их нет. Если запрос не пройдет по причине отсутствия таблицы - будет исключение. Есть специальная команда, которую запускает администратор, если поменялась схема, вот эта команда и создает таблицы. А веб-приложение ничего такого не делает.
Хмм… Как вариант - можно при старте обоих слоёв передавать из слоя бизнес-логики в слой хранилища все существующие типы объектов, а в хранилище их создавать при отсутствии?
Офлайн
Грубо говоря так
# работает веб-приложение
python start_wsgi.py
# запускаем обновление таблиц
python sync_tables.py
Офлайн