Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Выполнение SQL запросов в DB Oracle в Sublime Text 2

Anna | 16.06.2014 | нет комментариев
Надеюсь каждому отлично знаком знаменитый редактор Sublime Text 2. Хочу поделиться навыком, как я сумел облегчить себе жизнь, написав плагин для стремительного вызова запросов в BD Oracle прямо из редактора, легко выделив запрос и нажав комбинацию.

Любимый нами за быстроту, легкость и кросс-платформенность 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:
					# обявляем класс наш

 

Источник: programmingmaster.ru

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB