Python на LINUX + MSSQL

Linux > Python на LINUX + MSSQL
09.12.2015 13:16:11



Статья:

Python на  LINUX + MSSQL

Установка необходимых модулей

Откройте терминал и перейдите в каталог, в котором вы планируете создать сценарий Python. Введите следующие команды, чтобы установитьFreeTDS и pymssql. Драйвер pymssql использует FreeTDS для подключения к базам данных SQL.

Copy to clipboardCopy
sudo apt-get update
sudo apt-get  install freetds-dev freetds-bin
sudo apt-get  install python-dev python-pip
sudo pip install pymssql

 

Подключение к базе данных SQL

Функция pymssql.connect используется для подключения к базе данных SQL.

Copy
import pymssql
conn = pymssql.connect(server='yourserver.database.windows.net', user='yourusername@yourserver', password='yourpassword', database='AdventureWorks')

 

Выполнение оператора SQL SELECT

Функция cursor.execute может использоваться для извлечения результирующего набора из запроса к базе данных SQL. Эта функция фактически принимает любой запрос и возвращает результирующий набор, по которому может быть выполнена итерация с использованием cursor.fetchone().

Copy
import pymssql
conn = pymssql.connect(server='yourserver.database.windows.net', user='yourusername@yourserver', password='yourpassword', database='AdventureWorks')
cursor = conn.cursor()
cursor.execute('SELECT c.CustomerID, c.CompanyName,COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC;')
row = cursor.fetchone()
while row:
    print str(row[0]) + " " + str(row[1]) + " " + str(row[2])   
    row = cursor.fetchone()

Вставка строки, передача параметров и получение созданного первичного ключа

Для получения автоматически созданных значений первичного ключа в Базе данных SQL можно использовать свойство IDENTITY и объектSEQUENCE.

Copy
import pymssql
conn = pymssql.connect(server='yourserver.database.windows.net', user='yourusername@yourserver', password='yourpassword', database='AdventureWorks')
cursor = conn.cursor()
cursor.execute("INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) OUTPUT INSERTED.ProductID VALUES ('SQL Server Express', 'SQLEXPRESS', 0, 0, CURRENT_TIMESTAMP)")
row = cursor.fetchone()
while row:
    print "Inserted Product ID : " +str(row[0])
    row = cursor.fetchone()

Транзакции

Этот пример кода демонстрирует использование транзакций, в которых можно:

— начать транзакцию;

— вставить строку данных;

— откатить транзакцию для отмены вставки.

Copy
import pymssql
conn = pymssql.connect(server='yourserver.database.windows.net', user='yourusername@yourserver', password='yourpassword', database='AdventureWorks')
cursor = conn.cursor()
cursor.execute("BEGIN TRANSACTION")
cursor.execute("INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) OUTPUT INSERTED.ProductID VALUES ('SQL Server Express New', 'SQLEXPRESS New', 0, 0, CURRENT_TIMESTAMP)")
cnxn.rollback()

ПРИМЕР запихивание  лога в MSSQL

Создание  таблицы на MSSQL

CREATE TABLE dbo.mikrotik
(
id int identity,

mes varchar(10) NULL,
days varchar(20) NULL,
vrem varchar(20) NULL,
razdel varchar(50) NULL,
[log] nvarchar(350) NULL,
d varchar(10) NULL
) ON [PRIMARY]

Пример кода на python

import pymssql
conn = pymssql.connect(server='i7.iocsha', user='iocsha', password='5311453', database='ti')
cursor = conn.cursor()
cursor.execute("truncate table mikrotik")
myfile = open('/var/log/mikrotik.log', 'r')
for line in myfile.readlines():
    words = line.split()
    #print line
    #print str(words[0])+'|'+str(words[1])+'|'+str(words[4])
    cursor.execute("insert into [ti].[dbo].[mikrotik] (mes,days,vrem,razdel,[log]) values ('"+str(words[0])+"','"+str(words[1])+"','"+str(words[2])+"','"+str(words[4])+"','"+line+"')")


cursor.execute("update [ti].[dbo].[mikrotik] set [days]=cast( [days] +' '+ [mes]+' '+datename(yyyy,getdate()) as varchar)")
conn.commit()
conn.close()
myfile.close()