hotch-potch, Note to self

いろいろ作業記録

RaspberryPi上のPython3でSQLServerに読み書き

はじめに

Raspbian上で動かすPython3のスクリプトから、別のサーバのSQLServerに対しデータを書き込む方法について。(Python2.7と違って、apt-getでpymssqlのパッケージが入れられなかったので、そのインストール手順の覚え書きです)

環境

  • Raspbian(2018-11-13-raspbian-stretch-lite)
  • Python3

SQLServer用のライブラリ「pymssql」をインストール

pipを使用するので、インストールしていなければ下記を実行

$ sudo apt-get install python3-pip

pymssqlのコンパイルに必要なライブラリをインストール

$ sudo apt-get install freetds-dev -y
(補足)FreeTDS-devを入れ忘れると・・・

コンパイル中に下記のエラーが出ます

...
    creating build/temp.linux-armv6l-3.5/src
    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -g -fdebug-prefix-map=/build/python3.5-6waWnr/python3.5-3.5.3=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/local/include -I/usr/include/python3.5m -c src/_mssql.c -o build/temp.linux-armv6l-3.5/src/_mssql.o -DMSDBLIB
    src/_mssql.c:594:22: fatal error: sqlfront.h: No such file or directory
     #include "sqlfront.h"
                          ^
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-zgxb1qiz/pymssql/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-_78s2jjv-record/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-build-zgxb1qiz/pymssql/

pipからpymssqlをインストール

インストールを完了するのに、RaspberryPi3で15分程度、RaspberryPiZeroWで1時間弱掛かります。

$ pip3 install pymssql
Collecting pymssql
  Downloading https://files.pythonhosted.org/packages/2e/81/99562b93d75f3fc5956fa65decfb35b38a4ee97cf93c1d0d3cb799fffb99/pymssql-2.1.4.tar.gz (691kB)
    100% |????????????????????????????????| 696kB 97kB/s
Building wheels for collected packages: pymssql
  Running setup.py bdist_wheel for pymssql ... done
  Stored in directory: /home/pi/.cache/pip/wheels/21/35/92/911576b44bbe7c19ff65d0f90a4af9a9571db4af36ffd3ede1
Successfully built pymssql
Installing collected packages: pymssql
Successfully installed pymssql-2.1.4

pymssqlの動作チェック

テーブルにレコードをf追加する簡単なスクリプトでテストします。

SqlServerのテーブルを作成

create table T_LogTest(
	DateAppend datetime,
	ClientID NVARCHAR(255),
	Value0 smallint,
	Value1 smallint,
	Value2 smallint);

書き込みスクリプト

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from os import getenv
import pymssql

conn = pymssql.connect('<host name>', '<database name>', '<user name>', '<password>')
cursor = conn.cursor()

cursor.execute("""
    INSERT INTO T_LogTest (
        DateAppend ,
        ClientID ,
        Value0 ,
        Value1 ,
        Value2)
    VALUES (
        GETDATE(),
        'hoge',
        2000,
        2010,
        2020)
    """)

conn.commit()

conn.close()