前の関連記事:LibreOffice(29)Pythonインタプリタの置き換えは断念
LibreOffice4.2.2.1のバンドルPythonでSQLiteモジュールが使えるようにします。
Python3.3.5からSQLiteモジュールを抜き出す
まずは前回やった通りにPython3.3.5をインストールします。
C:\Python33にインストールされました。
まずはC:\Python33\python.exeでSQLiteがimportできるかやってみます。
C:\Python33>python
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'sqlite'
>>> import sqlite3
>>> import libsqlite3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'libsqlite3'
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'sqlite'
>>> import sqlite3
>>> import libsqlite3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'libsqlite3'
import sqlite3ではエラーが出てきませんね。
C:\Python33を"sqlite3"で検索すると1つのフォルダと3つのファイルが引っかかりました。
フォルダ
C:\Python33\Lib\sqlite3
ファイル
C:\Python33\libs\_sqlite3.lib
C:\Python33\DLLs\_sqlite3.pyd
C:\Python33\DLLs\sqlite3.dll
これらがSQLiteモジュールを構成しているようです。
さあ、どれをどこにコピーしましょう。
C:\Python33\Lib\sqlite3
C:\Python33\DLLs\_sqlite3.pyd
は
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\lib
へコピー。
C:\Python33\DLLs\sqlite3.dll
は
C:\Program Files (x86)\LibreOffice 4\program
へコピー。
C:\Python33\libs\_sqlite3.libはコピー先がわからずコピーせず。
C:\Program Files (x86)\LibreOffice 4\programを"*.lib"で検索してもなにもでてこないので_sqlite3.libは不要なのかもしれません。
C:\Program Files (x86)\LibreOffice 4\program>python
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>>
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:37:12) [MSC v.1600 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>>
エラーがでてきませんね。
必要なファイルをコピーしたらもうPython3.3.5は不要ですのでアンイストールしました。
あとはSQLiteの動作確認です。
(2014.8.3追記。LibreOfficeを上書きアップデートすると上記のコピーしたファイルは消えてしまいますので毎回コピーしないといけません。)
Python2.xのスクリプトはPython3.xでは動かない
早速ネットで探した例文を動かしてみるとほとんどエラーでとまります。
おかしい、と思ったら原因はprint文でした。
python print文のエラー - その他(プログラミング) - 教えて!goo
Python3.0からprint文の書き方が print "Hello world!" から print("Hello world!") になったそうです。
What’s New In Python 3.0 — Python 3.3.3 ドキュメント
ここにいろいろ解説がありました。
LibreOfficeに付属のPythonでSQLiteを使ってみる
データベース(sqlite) - Python | Welcome to underground
Sqlite3 / Python 3 example - Python example
これらにあるPythonスクリプトをPyCharmから動かすことができました。
12.6. sqlite3 — SQLite データベースに対する DB-API 2.0 インタフェース — Python 3.3.3 ドキュメント
ここにPythonのSQLiteモジュールの公式ドキュメントがあります。
今度はLibreOfficeのマクロからSQLiteを実行してみます。
#SQLite_check.py import sqlite3 import sys def SQLite_check(): oDoc = XSCRIPTCONTEXT.getDocument() oText="Pythonインタプリタのバージョン\n"+sys.version+"\n\n" oText=oText+"Pythonインタプリタの絶対パス\n"+sys.executable+"\n\n" oText=oText+"Pythonモジュール検索パス\n"+"\n".join(sys.path)+"\n\n" oText=oText+"SQLite_test.dbから読み取ったレコード\n\n" db = sqlite3.connect("SQLite_test.db") cur = db.cursor() #テーブルの存在確認 cur.execute("SELECT * FROM sqlite_master WHERE type='table' and name='test_table'") if cur.fetchone() != None: #すでにテーブルがあるときはテーブルをまず削除する cur.execute("drop table test_table") cur.execute("create table test_table(ichi_retsu int, ni_retsu int, san_retsu int)") db.commit() cur.execute("insert into test_table values (?, ?, ?)", (11, 11, 13,)) test_table_data = [ (21, 22, 23), (31, 32, 33), (41, 42, 43), (51, 52, 53), ] cur.executemany("insert into test_table values (?, ?, ?)", test_table_data) cur.execute("select * from test_table") i=0#読み取る列番号 oText=oText+str(i+1)+"列目を表示します\n" for row in cur: oText=oText+str(row[i])+"\n" cur.close() db.close() oDoc.getText().setString(oText) if __name__ == "__main__": import unopy XSCRIPTCONTEXT = unopy.connect() if not XSCRIPTCONTEXT: print("Failed to connect.") sys.exit(0) SQLite_check()これをWriterで実行します。
Pythonインタプリタのバージョン
3.3.3 (default, Feb 26 2014, 23:40:42) [MSC v.1600 32 bit (Intel)]
Pythonインタプリタの絶対パス
C:\Program Files (x86)\LibreOffice 4\program\soffice.bin
Pythonモジュール検索パス
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\lib
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\lib\site-packages
C:\Program Files (x86)\LibreOffice 4\program
C:\Program Files (x86)\LibreOffice 4\program\python33.zip
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\DLLs
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3
C:\Program Files (x86)\LibreOffice 4\share\extensions\dict-en\pythonpath
SQlite_test.dbから読み取ったレコード
1列目を表示します
11
21
31
41
51
3.3.3 (default, Feb 26 2014, 23:40:42) [MSC v.1600 32 bit (Intel)]
Pythonインタプリタの絶対パス
C:\Program Files (x86)\LibreOffice 4\program\soffice.bin
Pythonモジュール検索パス
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\lib
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\lib\site-packages
C:\Program Files (x86)\LibreOffice 4\program
C:\Program Files (x86)\LibreOffice 4\program\python33.zip
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3\DLLs
C:\Program Files (x86)\LibreOffice 4\program\python-core-3.3.3
C:\Program Files (x86)\LibreOffice 4\share\extensions\dict-en\pythonpath
SQlite_test.dbから読み取ったレコード
1列目を表示します
11
21
31
41
51
Writerのドキュメントこういう結果が出力されるはずです。
SQlite_test.dbがC:\Program Files (x86)\LibreOffice 4\programに作成されています。
マクロではPythonインタプリタの絶対パスで実行されたことになるようです。
このSQLite_check.pyをオートメーションで実行するとインタプリタのあるフォルダではなくSQLite_check.pyのあるフォルダにSQlite_test.dbが作成されます。
実際に運用するときはdbの置き場所を工夫しないといけませんね。
参考にしたサイト
What’s New in Python — Python 3.3.3 ドキュメント
Python 3.3.3までの更新履歴。
What’s New In Python 3.0 — Python 3.3.3 ドキュメント
Python2.xから大幅に変更があったPython3.0の更新履歴。
データベース(sqlite) - Python | Welcome to underground
ここのスクリプトを動かすことができました。
Sqlite3 / Python 3 example - Python example
ここのスクリプトを動かすことができました。
12.6. sqlite3 — SQLite データベースに対する DB-API 2.0 インタフェース — Python 3.3.3 ドキュメント
PythonのSQLiteモジュールの公式ドキュメント。
0 件のコメント:
コメントを投稿