Найти - Пользователи
Полная версия: Универсальная проверка на существование таблицы для разных реляционных БД
Начало » Базы данных » Универсальная проверка на существование таблицы для разных реляционных БД
1 2 3
py.user.next
den1024
как проверять на существование таблицы в БД?
Каждый исполнитель по своему будет проверять. Обычно таблицы регистрируются в служебной таблице.

Из одной своей проги
Метод для sqlite:
    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]

Метод для mysql:
    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
FishHook
den1024
как проверять на существование таблицы в БД?
А можете рассказать зачем вам это? И вообще, что вы изобретаете, почему не алхимия?
den1024
FishHook

Просто на текущий момент, можно сказать, изучаю python и пока не хочу лезть в дебри ORM.
Реализовываю слой хранилища для своего приложения. Да он чем-то напоминает ORM но с минимальным функционалом на текущий момент.
den1024
py.user.next

Благодарю. На сколько я понимаю - чего-то универсального для подобных вещей нет и необходимо с каждой БД по своему производить действия?
FishHook
den1024
Просто на текущий момент, можно сказать, изучаю python и пока не хочу лезть в дебри ORM.
Реализовываю слой хранилища для своего приложения. Да он чем-то напоминает ORM но с минимальным функционалом на текущий момент.
ОК, а зачем ваша программа проверяет существование таблицы БД?
den1024
FishHook

По логике работы программы - слой хранилища получает от слоя бизнес-логики список (list) с данными (объект) и тип объекта, после этого смотрит в БД - существует ли таблица под данный тип объекта и если нет то создаёт её, а если таблица существует то просто добавляет в неё полученный объект.
FishHook
То есть на каждый чих от логике вы собираетесь проверять существование таблицы?
Это же оверхед на ровном месте.
ОРМы так не делают. Вам нужно придумать механизм миграций (south migration) или что-то похожее примитивное (django syncdb). Ну или делать это один раз при старте программы.
den1024
FishHook
То есть на каждый чих от логике вы собираетесь проверять существование таблицы? Это же оверхед на ровном месте.ОРМы так не делают. Вам нужно придумать механизм миграций (south migration) или что-то похожее примитивное (django syncdb). Ну или делать это один раз при старте программы.

Хмм… Как вариант - можно при старте обоих слоёв передавать из слоя бизнес-логики в слой хранилища все существующие типы объектов, а в хранилище их создавать при отсутствии?
FishHook
den1024
Хмм… Как вариант - можно при старте обоих слоёв передавать из слоя бизнес-логики в слой хранилища все существующие типы объектов, а в хранилище их создавать при отсутствии?
Джанга, например, так не делает. Самому фреймворку глубоко наплевать, есть там таблицы или их нет. Если запрос не пройдет по причине отсутствия таблицы - будет исключение. Есть специальная команда, которую запускает администратор, если поменялась схема, вот эта команда и создает таблицы. А веб-приложение ничего такого не делает.
FishHook
Грубо говоря так
# работает веб-приложение
python start_wsgi.py

# запускаем обновление таблиц
python sync_tables.py
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB