Итак, не вдаваясь в исторические справки перейдем к сути. Для подключения к БД необходимо выполнить следующую последовательность действий:
Установить TDS (Tabular Data Stream) протокол, установив проект FreeTDS, который по умолчанию включает в себя ODBC интерфейс. Устанавливаем следующие пакеты:
sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc freetds-bin
Настраиваем FreeTDS скопировав приведенный ниже конфиг в
/etc/freetds/freetds.conf
Настройки указываем свои для БД к которой вы хотите подключиться. Я в качестве примера здесь и далее буду использовать MS SQL базу данных блокчейна Голос, поддерживаемую пользователем @arcange
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
#
# This file is installed by FreeTDS if no file by the same
# name is found in the installation directory.
#
# For information about the layout of this file and its settings,
# see the freetds.conf manpage "man freetds.conf".
# Global settings are overridden by those in a database
# server specific section
[global]
# TDS protocol version
tds version = 8.0
client charset = UTF-8
# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
; dump file = /tmp/freetds.log
; debug flags = 0xffff
# Command and connection timeouts
; timeout = 10
; connect timeout = 10
# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
# Golos server
[golosserver]
host = sql.golos.cloud
port = 1433
tds version = 8.0
- Проверяем, можем ли мы подключиться к базе данных, используя утилиту tsql
tsql -S <SERVERNAME> -U <USERNAME>@<HOST> -P <PASSWORD>
На примере рабочей БД, вводим в коммадной строке:
tsql -S golosserver -U golos -P golos
Если вывод такой же, как на скриншоте выше, значит FreeTDS настроен правильно. Используя tsql вы можете отправлять SQL запросы прямо из коммандной строки.
Если вдруг подключиться не удалось, то разбор всех возможных ошибок смотрим по этой ссылке
- Настраиваем интерфейс ODBC, скопировав приведенные ниже конфиги в соответствующие пути, предварительно задав настройки для своих конкретных БД:
--- /etc/odbcinst.ini ---
[FreeTDS]
Description=TDS driver (Sybase/MS SQL)
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout=
CPReuse=
FileUsage=1
UsageCount=2
--- /etc/odbc.ini ---
[golosDSN]
Driver = FreeTDS
Description = ODBC connection via FreeTDS to Golos db
Trace = No
Server = sql.golos.cloud
Port = 1433
#TDS Version = 7.0
#Servername = golosserver
Database = DBGolos
Более подробно о FreeTDS можно почитать по этой ссылке
- Теперь всё готово к тому, чтобы подключаться к БД прямо из кода программы.
Я для этих целей использую python. Вот пример простенького кода, выполняеющего SQL запрос, который выводит всех авторов и заголовки комментариев, в тексте которых содержится упоминание @phenom.
import pyodbc
import pdb
from pprint import pprint
# Create connection
#set Data Source Name that we have in /etc/odbc.ini config
dsn = 'golosDSN'
user = 'golos'
password = 'golos'
database = 'DBGolos'
#make sure you use version of tds driver not less than 7.0 otherwise it'll not
#work
tds_ver = '8.0'
command = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;TDS_Version=%s' % (dsn, user, password, database,tds_ver)
con = pyodbc.connect(command)
cur = con.cursor()
db_cmd = """SELECT author, title
FROM TxComments
WHERE CONTAINS(body, '@phenom')"""
res = cur.execute(db_cmd)
pprint(res.fetchall())
Надеюсь этот небольшой гайд оказался для вас полезным.
Подписывайтесь на обновления и голосуйте за моего делегата!
vote_for_witness your_id phenom true true
серьезно так
да, тут без шуток
Хороший пост. Я тоже на эту тему написал, только попроще: https://golos.id/linux/@sxiii/instrukciya-podklyuchaem-linux-k-golosu-cherez-mssql-server-cli-toolkit-manual
Отличный пост ;)
спасибо!
если бы не твоя DB, поста бы не было)