Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Базы данных
  • » Универсальная проверка на существование таблицы для разных реляционных БД [RSS Feed]

#1 Май 28, 2015 10:10:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9778
Репутация: +  845  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

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



Офлайн

#2 Май 28, 2015 10:25:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

den1024
как проверять на существование таблицы в БД?
А можете рассказать зачем вам это? И вообще, что вы изобретаете, почему не алхимия?



Офлайн

#3 Май 28, 2015 10:33:38

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

FishHook

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

Офлайн

#4 Май 28, 2015 10:34:51

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

py.user.next

Благодарю. На сколько я понимаю - чего-то универсального для подобных вещей нет и необходимо с каждой БД по своему производить действия?

Офлайн

#5 Май 28, 2015 10:38:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

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



Офлайн

#6 Май 28, 2015 10:43:38

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

FishHook

По логике работы программы - слой хранилища получает от слоя бизнес-логики список (list) с данными (объект) и тип объекта, после этого смотрит в БД - существует ли таблица под данный тип объекта и если нет то создаёт её, а если таблица существует то просто добавляет в неё полученный объект.

Офлайн

#7 Май 28, 2015 10:48:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

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



Офлайн

#8 Май 28, 2015 10:52:45

den1024
Зарегистрирован: 2014-03-28
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

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

Хмм… Как вариант - можно при старте обоих слоёв передавать из слоя бизнес-логики в слой хранилища все существующие типы объектов, а в хранилище их создавать при отсутствии?

Офлайн

#9 Май 28, 2015 11:01:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

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



Офлайн

#10 Май 28, 2015 11:02:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Универсальная проверка на существование таблицы для разных реляционных БД

Грубо говоря так

# работает веб-приложение
python start_wsgi.py

# запускаем обновление таблиц
python sync_tables.py



Офлайн

  • Начало
  • » Базы данных
  • » Универсальная проверка на существование таблицы для разных реляционных БД[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version