Python(27)Essential SQLAlchemyのコード例を動かす

2017-09-08

旧ブログ

t f B! P L
Essential SQLAlchemyという本のコード例がGitHubにあるのでそれを動かしてみます。

前の関連記事:Python(26)XPathでxmlの子要素からルートまで遡る方法


GitHubの例をEclipseのPyDevプロジェクトにする


linuxBean14.04(165)faif/python-patternsでデザインパターンの学習のfaif/python-patternsと同様にしました。

oreillymedia/essential-sqlalchemy-2eについて、フォークして、Eclipseのデフォルトフォルダでローカルリポジトリにしました。

インタープリターをlinuxBean14.04(175)Anacondaの運用方法を考えるでインストールしたAnacondaのものにして、srcフォルダをもつPyDevプロジェクトにしました。

これでできたessential-sqlalchemy-2eプロジェクトをPyDev Package Explorerで右クリック→Team→Share Project、で先ほどのローカルリポジトリを指定しました。

元のリポジトリのルートにあるREADME.mdファイルとrequirements.txtファイル以外のファイルをsrcフォルダに移動させました。

Essential SQLAlchemyの例を実行する



pyファイル以外ににipynbファイルで書いてある章もあります。

まずch04フォルダ内のコードをみてみるとRunではなにも出力が得られません。

テストコードはあるのでch04フォルダを→クリック→Run As→Python unit-test、で実行してみます。
Finding files... done.
Traceback (most recent call last):
  File "/home/pq/.eclipse/org.eclipse.platform_4.6.2_944779670_linux_gtk_x86/plugins/org.python.pydev_5.6.0.201703221358/pysrc/_pydev_runfiles/pydev_runfiles.py", line 468, in __get_module_from_str
    mod = __import__(modname)
  File "/home/pq/git/essential-sqlalchemy-2e/essential-sqlalchemy-2e/src/ch04/test_mock_app.py", line 4, in <module>
    import mock
ModuleNotFoundError: No module named 'mock'
ERROR: Module: test_mock_app could not be imported (file: /home/pq/git/essential-sqlalchemy-2e/essential-sqlalchemy-2e/src/ch04/test_mock_app.py).
Importing test modules ... done.

/home/pq/anaconda3/lib/python3.6/site-packages/sqlalchemy/sql/sqltypes.py:596: SAWarning: Dialect sqlite+pysqlite does *not* support Decimal objects natively, and SQLAlchemy must convert from floating point - rounding errors and other issues may occur. Please consider storing Decimal numbers as strings or integers on this platform for lossless storage.
  'storage.' % (dialect.name, dialect.driver))
----------------------------------------------------------------------
Ran 18 tests in 0.196s

OK
エラーが一つと警告が一つでてきます。

エラーはunittest.mockをインポートできないというものです。

とりあえずch04フォルダを右クリック→PyDev→Apply 2To3、としてパラメーターに-wをいれてOKするとtest_app.pyとtest_mock_app.pyが書き換えられました。

でもエラーは解決しませんでした。

ということでエラー出力で指摘されているimport mockをfrom unittest import mockに書き換えました。

これでOKになるテストが18から21増えました。

警告は有効桁数(十進数と二進数による差異)に関するものです。

sqlite+pysqliteでは9.4. decimal — 十進固定及び浮動小数点数の算術演算 — Python 3.5.3 ドキュメントDecimal オブジェクトをサポートしておらず、SQLAlchemyは浮動小数点から変換するので、厳密に有効桁数(十進数と二進数による差異)を管理したいときは文字列か整数にしてデータベースに値を入れるようにしましょう、ということです。

次の09chフォルダのコードも同様に対処しました。

~/anaconda3/bin/jupyter-notebook --notebook-dir=~/git/essential-sqlalchemy-2e/essential-sqlalchemy-2e/src

ipynbファイルについてはこのコマンドでJupyter Notebookを起動して、~/git/essential-sqlalchemy-2e/essential-sqlalchemy-2e/srcフォルダをデフォルトフォルダにしました。

SQLAlchemyについてまだよく学習していないので実行結果についてはまたそのうちやりたいと思います。

iOSでGithubのipynbファイルをレンダリングする方法


CodeHub - iOS Client for GitHub

iOSでGibHubのコードを見るときに私はこのアプリを利用しています。


しかしこのアプリではipynbファイルをレンダリングしてみることはできないようで、ipynbファイルのソースが表示されるだけです。

ここからブラウザでGitHubを開いて、レンダリングするようにします。

右上のボタンをクリック→Show in GitHub。


ここからのやり方がなかなかわからなかったのですが、答えは簡単でした。

一番下までスクロールします。


Desktop versionというボタンがでてくるのでそれをクリックします。


これでipynbがレンダリングされました。

つまりはGitHubのデスクトップバージョンでみればレンダリングして見れるということです。

参考にしたサイト


SQLAlchemy - The Database Toolkit for Python
SQLAlchemyのホームページ。

もくじ — SQLAlchemy 0.6.5 ドキュメント (和訳)
SQLAlchemy 0.6.5のドキュメントの日本語訳。

oreillymedia/essential-sqlalchemy-2e
Essential SQLAlchemyという本のコード例のGitHubリポジトリ。

9.4. decimal — 十進固定及び浮動小数点数の算術演算 — Python 3.5.3 ドキュメント
DecimalオブジェクトはSQLAlchemyとSqliteの組み合わせではそのままでは扱えないと警告がでてきます。

CodeHub - iOS Client for GitHub
iOSでGitHubを閲覧する便利なアプリ。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ