Любимый нами за быстроту, легкость и кросс-платформенность Sublime Text богат огромным количеством расширений, т. н. пакетов и плагинов на любой вкус и цвет. Но плагина для вызова SQL запросов я не нашел (если я не прав, то буду рад если поделитесь). Ну чтож, нету — не беда, напишем свой.
Почитав документацию и посмотрев пару примеров приступим.
Плагин будет работать очень просто: выделил запрос, нажал комбинацию и в новом окне появится результат.
Первым делом создаем новый плагин Tools -> New plugin
import sublime, sublime_plugin class ExampleCommand(sublime_plugin.TextCommand): def run(self, edit): self.view.insert(edit, 0, "Hello, World!")
Сразу сохраняем его под именем под именем Oquery.py, но Sublime предлжит нам его сохранить в папке User, но мы сохраним его на уровень выше в папку Packages в собственной для него папке Oquery.
Для общения с базой нам нужен класс cx_Oracle. Скачиваем и возвращаемся в нашу папку OQuery и создаем в ней папку lib, в которой мы будем хранить необходимые библиотеки. В ней мы сохраним скачаный архив в папке cx_Oracle.
Я хочу чтобы ответ запроса был предоставлен в виде симпатичных таблиц, и для этого уже есть подходящий для нас плагин. Проделываем все то же самое: скачиваем, распаковываем и переименовываем папку в prettytable.
Для хранения настроек базы нам необходим конфигурационный файл Oquery.sublime-settigs. Создаем его и сохраняем в корневой папке нашего плагина с содержанием (пример):
{ "host" : "localhost", "port" : 1521, "dbname" : "demoDB", "username" : "user1", "password" : "pass" }
Теперь у нас все есть приступаем к написанию самого плагина.
В верху файла объявляем кодировку и импортируем нужные нам модули, в том числе и сам коннектор к базе и библиотеку вывода табличек
# coding=utf-8 import sys import os sys.path.append(os.path.dirname(sys.executable)) sys.path.append(os.path.join(os.path.dirname(__file__), "lib","cx_Oracle")) sys.path.append(os.path.join(os.path.dirname(__file__), "lib","prettytable")) import sublime import sublime_plugin import cx_Oracle import unicodedata import prettytable
Строки
sys.path.append(os.path.join(os.path.dirname(__file__), "lib","cx_Oracle")) sys.path.append(os.path.join(os.path.dirname(__file__), "lib","prettytable"))
Говорит сублайму где искать наши библиотеки. При подключении prettytable Sublime у меня ругался на отсутствие модуля unicodedata, и простое импортирование его от ошибки не избавляло, так как в Sublime есть баг, благодаря которому сублайм не знает где расположен тот самый модуль unicodedata. Не много погуглив я нашел решение добавив строчку
sys.path.append(os.path.dirname(sys.executable))
И проблема решается.
Приступаем к самой команде
class OqueryCommand(sublime_plugin.TextCommand): def run(self, edit): # получаем объект view view = self.view # получаем массив координат выделенной области region = view.sel()[0] if not region.empty(): # если не пустой, вырезаем сам текст запроса selection = view.substr(region) try: # В этом классе находятся все наши настройки из файла Oquery.sublime-settings settings = sublime.load_settings('Oquery.sublime-settings') # подключаемся к базе db = cx_Oracle.connect(str(settings.get('username')), str(settings.get('password')), settings.get('host')+':'+str(settings.get('port'))+'/'+settings.get('dbname')) except cx_Oracle.DatabaseError, e: sublime.message_dialog(str(e)) else: # создаем курсор cursor = db.cursor() try: # и выполняем запрос cursor.execute(selection) except cx_Oracle.DatabaseError, e: sublime.message_dialog(str(e)) else: # обявляем класс нашей таблицы и кормим ей наш курсор pt = prettytable.from_db_cursor(cursor) # переводим все в строку tableStr = pt.get_string() # создаем новое окно output = view.window().new_file(); # и отдаем ему весь результат output.insert(edit, 0, tableStr) else: sublime.message_dialog('Select a proper SQL query')
Вот и все. но еще нам нужно объявить комбинацию для вызова нашей команды. Делается это очень просто Preferences -> Key Bindings User. И добавляем в него одну строчку
[ { "keys": ["ctrl+o", "ctrl+r"], "command": "oquery" } ]
Наш плагин будет работать по комбинации (ctrl+o)+r. Вы можете выбрать и другую.
Вот и все теперь мы выделяем любой запрос и легким нажатием клавиш, мы получаем ответ в новом окне. Не правда ли замечательно?
При желании вы можете переделать все на любую другую базу данных.
Кому лень, прилагаю архив
ссылка на оригинал статьи http://habrahabr.ru/post/203742/
Добавить комментарий