Category: ‘Python’

cx_Oracle でOracle接続

2017年1月26日 Posted by PURGE

開発環境が、Windowsで、データベースの文字コードはSJIS。

cx_Oracleを使用して、Oracle接続をしてみたが、どうしても出力結果が文字化けしてしまう。
そこで、下記にて環境変数を指定してみた。

import os
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
import cx_Oracle
import os

os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
db_user = 'user'
db_pass = 'xxxx'
db_host = '(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521)) (CONNECT_DATA =(SERVER = DEDICATED)(SID = HOGE)))'
con = cx_Oracle.connect(db_user, db_pass, db_host)

cur = con.cursor()
sql = 'select member_id, member_name from members order by 1'
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
    member_id = row[0]
    member_name = row[1]
    print( member_name)

うまくいった。

Ruby と Python と Elixir と。

2016年12月30日 Posted by PURGE

除算の違い。

# Ruby
puts 3.to_f / 2 #=> 1.5
puts 3 / 2      #=> 1

# Python
print(3 / 2) # => 1.5
print(3 // 2) # => 1

# Elixir ※1.4以降
require Integer
IO.puts(3 / 2) # => 1.5
IO.puts(Integer.floor_div(3, 2)) # => 1

剰余の違い。

# Ruby
puts 5 % 2 #=> 1

# Python
print(5 % 2) # => 1

# Elixir ※1.4以降
require Integer
IO.puts(Integer.mod(5, 1)) # => 1

べき乗の違い

# Ruby
puts 2 ** 3 #=> 8

# Python
print(2 ** 3) # => 8

# Elixir ※Erlangの関数使用
IO.puts(:math.pow(2,3)|> round) # => 8

SVNバックアップスクリプト

2016年5月13日 Posted by PURGE

#!/bin/sh
#
# SVN Repo backup script
#
REPO_DIR=/var/www/svn/repos/
MNT_DIR=/mnt/svn/
BAK_DIR="//10.0.0.0/windows/Backup/dir/svn"
HOT_BACKUP=/usr/share/doc/subversion-1.4.2/tools/backup/hot-backup.py
USER_NAME=username
PASSWD=xxxxxx

EXIT_STATUS=0
# 保存世代数(NOT WORKING)
# 実際のスクリプトに記載すること
export SVN_HOTBACKUP_BACKUPS_NUMBER=7

mount -t cifs -o username=$USER_NAME,password=$PASSWD $BAK_DIR $MNT_DIR

for REPO in `find $REPO_DIR -maxdepth 1 -mindepth 1 -type d`
do
  $HOT_BACKUP --archive-type=gz $REPO $MNT_DIR
  if [ $? = 0 ]; then
    logger "SVN Backup done. repository:$REPO, $BKFILE"
    echo "SVN Backup OK $BKFILE"
  else
    logger "SVN Backup NG $BKFILE"
    echo "SVN Backup NG $BKFILE"
    EXIT_STATUS=1
  fi
done

umount -l $MNT_DIR

exit $EXIT_STATUS

Pythonでシンプルな暗号化

2016年4月13日 Posted by PURGE

オリジナルの値に適当な数値を足して、16進数にする単純な暗号化と復号化処理。

org_str = '1010'
KEY_VAL = 1234

print('初期値:', org_str)

enc_str = hex(int(org_str) + KEY_VAL)
print('暗号化:', enc_str)

dec_str = (int(enc_str, 16) - KEY_VAL)
print('復号化:', dec_str)

初期値: 1010
暗号化: 0x8c4
復号化: 1010

重要な場面では使えないので気を付けてください。

Windows7でPython3.5環境で cx_Oracleを使う

2016年3月18日 Posted by PURGE

pythonでOracleへ接続したい。

import cx_Oracle
import os
os.environ["NLS_LANG"] = "Japanese_Japan.AL32UTF8"

tns = cx_Oracle.makedsn("192.168.0.1",1521,"ORASID")
connection = cx_Oracle.connect("user","pass",tns)
#connection = cx_Oracle.connect("user","pass","(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.1) (PORT=1521))(CONNECT_DATA=(SID=ORASID)))")

cursor = connection.cursor()
agent_cd = '7'
sql = """
    select agent_cd, agent_name
      from agents
     where agent_cd = :agent_cd
    """
cursor.execute(sql, agent_cd)
rows = cursor.fetchall()
for agent in rows:
    print(agent[0], agent[1])


Windows7でPython3.5環境で python-docxを使う

2016年3月17日 Posted by PURGE

python-docxを使用しようと思ったが、ライブラリがなくエラー。

https://python-docx.readthedocs.org/en/latest/

コンパイラがないと怒られたので、Visual Studio15をダウンロードしてインストール。

しかし、lxml が無いとエラーで怒られる。
そこで単独インストールしたが、どうもうまく行かない。

easy_install lxml
include ファイルを開けません。'libxml/xpath.h':No such file or directory

そこで、下記サイトへ行って直接ファイルをダウンロード。
http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

直接インストール。

pip3 install lxml-3.5.0-cp35-none-win32.whl

動作した。

#from docx import Document
from docxtpl import DocxTemplate

document = DocxTemplate('docx_tpl.docx')
context = {'title' : "タイトル", 'greeting' : "こんにちは。"}
document.render(context)
document.save('out_docx.docx')

テンプレートとなるwordファイルには、{{ title }} {{ greeting }} のタグを埋め込めばよい。

Windows環境で、pipのプロキシ設定

2016年2月6日 Posted by PURGE

社内環境のネットワーク内から、pipを試したがうまく行かない。
proxy設定している環境だからだ。

そこで、環境変数に追記する方法にて試した。

C:\Users\whoocus>set http_proxy=http://10.10.10.1:8080

C:\Users\whoocus>pip3 install flask
Collecting flask
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connectio
n aborted.', ConnectionRefusedError(10061, '対象のコンピューターによって拒否されたため、接続できませんでした。', None, 1
0061, None))': /simple/flask/

残念ながら失敗。

調べてみると、pipコマンドのオプションとして存在している。

C:\Users\whoocus>pip install flask --proxy http://10.10.10.1:8080
Collecting flask
  Downloading Flask-0.10.1.tar.gz (544kB)
    100% |################################| 544kB 835kB/s
Collecting Werkzeug>=0.7 (from flask)
  Downloading Werkzeug-0.11.3-py2.py3-none-any.whl (305kB)
    100% |################################| 307kB 1.3MB/s
Collecting Jinja2>=2.4 (from flask)
  Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
    100% |################################| 266kB 1.9MB/s
Collecting itsdangerous>=0.21 (from flask)
  Downloading itsdangerous-0.24.tar.gz (46kB)
    100% |################################| 49kB 4.1MB/s
Collecting MarkupSafe (from Jinja2>=2.4->flask)
  Downloading MarkupSafe-0.23.tar.gz
Installing collected packages: Werkzeug, MarkupSafe, Jinja2, itsdangerous, flask
  Running setup.py install for MarkupSafe
  Running setup.py install for itsdangerous
  Running setup.py install for flask
Successfully installed Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.3 flask-0.10.1 itsdangerous-0.24
You are using pip version 7.1.2, however version 8.0.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

rubyの時もgemがそうであった。
上手く行ったので覚え書き。

Python3 事始め

2014年2月21日 Posted by PURGE

■animal.py

class Animal:
    def __init__(self, name):
        self.name = name
        
    def call(self):
        print('こんにちは。%s さん' % (self.name))

■main.py

from animal import Animal
from person import Person

dog = Animal("犬")
cat = Animal("猫")
monkey = Animal("猿")

p1 = Person("太郎")

dog.call()
cat.call()
monkey.call()
p1.speak()
p1.call()

■出力

こんにちは。犬 さん
こんにちは。猫 さん
こんにちは。猿 さん
私は太郎 です。
こんにちは。太郎 さん

python3 での print format でのエラー

2014年2月21日 Posted by PURGE

正しい書き方かどうかまだ勉強中ですが、とりあえず、下記にて動作しました。

    def hello(self):
        print('こんにちは。%s さん' % (self.name))