そのときの記録。
今回はMySQLを使うPyramidのプロジェクトを作ってみる。
- 環境
- MySQLの準備
- 新しい環境の作成
- SQLAlchemy を使った Pyramid Project の作成
- ソースの修正の前にEclipseプロジェクトを作成する
- プロジェクトを修正してMySQLと接続する
MacOS 10.8.2
Python 2.7.3 (MacPortsでインストールしたものを使用する)
MySQL 5.5.28 (MacPortsでインストールしたものを使用する)
py27-pip 1.2.1 (MacPortsでインストールしたものを使用する)
Apache 2.2.7 (標準でインストールされているもの)
(mod_wsgiはソースを落としてきてインストール)
Eclipse 4.2.1
Pydev 2.7.1
Python 2.7.3 (MacPortsでインストールしたものを使用する)
MySQL 5.5.28 (MacPortsでインストールしたものを使用する)
py27-pip 1.2.1 (MacPortsでインストールしたものを使用する)
Apache 2.2.7 (標準でインストールされているもの)
(mod_wsgiはソースを落としてきてインストール)
Eclipse 4.2.1
Pydev 2.7.1
前回 3. MySQLのインストール でインストールしたMySQLを使う。
MySQLにこのプロジェクトで使うデータベース「pyramid_db」と、ユーザー「pyramid_user」を作成しておく。
MySQLに入る。
データベースの作成。
そのデータベースのユーザーの作成。
ちゃんと作成できたか確認する。
MySQLにこのプロジェクトで使うデータベース「pyramid_db」と、ユーザー「pyramid_user」を作成しておく。
MySQLに入る。
$ mysql -u root -p mysql
データベースの作成。
mysql> CREATE DATABASE pyramid_db CHARACTER SET utf8;
そのデータベースのユーザーの作成。
GRANT ALL ON pyramid_db.* TO pyramid_user@localhost IDENTIFIED by "password";
ちゃんと作成できたか確認する。
$ mysql -u pyramid_user -p pyramid_db mysql> create table book (id int(11), title varchar(64)); mysql> show tables; +----------------------+ | Tables_in_pyramid_db | +----------------------+ | book | +----------------------+ 1 row in set (0.00 sec) mysql> drop table book;
virtualenvで環境「env_mysql」を作って、そこにPyramidをインストールする。
$ virtualenv --no-site-packages env_mysql $ cd env_mysql $ bin/pip install pyramid
$ bin/pcreate -s alchemy MyProject
$ cd MyProject $ ../bin/python setup.py develop
$ ../bin/python setup.py test -q
$ ../bin/pserve development.iniで、http://localhost:6543に表示される。
でも、表示されるのはエラーメッセージ。
Pyramid is having a problem using your SQL database.
残念ながら、動かす前にデータベースの初期化が必要だというメッセージが表示される。
$ ../bin/initialize_MyProject_db development.ini
これでもう一度pserve。
$ ../bin/pserve development.iniで、http://localhost:6543に表示される。
参考にしたのはここ。
SQLAlchemy + URL Dispatch Wiki Tutorial
Eclipseのプロジェクトにしておいた方が、修正や動作確認が楽。
Eclipseを立ち上げて、workspaceを先ほど作成した「env_mysql」ディレクトリにする。
新規のworkspaceの場合は、Open Perspective で PyDevを追加する。
環境設定 → PyDev → Interpreter Python で、「env_mysql/bin/python」を登録する。
System PYTHONPATHに次のディレクトリも含める。これにチェックを入れておく。
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
やっとここで、Eclipseの新規プロジェクト作成。PyDevのPyDev Projectで、名前は先ほど作成したPyramidのプロジェクトと同じMyProjectとする。
Eclipseの環境設定にある PyDev Interpreter - PythonのString Substitution Variablesに「run_pyramid」で、値が自分の環境にあるbin/pserveとなる項目を追加する。
さらにRun Configurationで、次の項目を設定する。
Main: Project -> MyProject
Main: Main Module -> ${run_pyramid}
Arguments: Program arguments -> development.ini
これで、Eclipseから実行することができる。ステップ動作も可能となる。
Eclipseを立ち上げて、workspaceを先ほど作成した「env_mysql」ディレクトリにする。
新規のworkspaceの場合は、Open Perspective で PyDevを追加する。
環境設定 → PyDev → Interpreter Python で、「env_mysql/bin/python」を登録する。
System PYTHONPATHに次のディレクトリも含める。これにチェックを入れておく。
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/
やっとここで、Eclipseの新規プロジェクト作成。PyDevのPyDev Projectで、名前は先ほど作成したPyramidのプロジェクトと同じMyProjectとする。
Eclipseの環境設定にある PyDev Interpreter - PythonのString Substitution Variablesに「run_pyramid」で、値が自分の環境にあるbin/pserveとなる項目を追加する。
さらにRun Configurationで、次の項目を設定する。
Main: Project -> MyProject
Main: Main Module -> ${run_pyramid}
Arguments: Program arguments -> development.ini
これで、Eclipseから実行することができる。ステップ動作も可能となる。
development.iniとproduction.iniにある次の行を修正する。
<変更前>
setup.pyで「mysql-python」の追加。
myproject/models.pyで、フィールド型のTextをStringに変更する。
同じくmyproject/models.pyのモデルのフィールド定義(class MyModel(Base):)のところもTextをStringにする。長さを指定し、uniqueは削除する。
<変更前>
<変更前>
sqlalchemy.url = sqlite:///%(here)s/MyProject.sqlite<変更後>
sqlalchemy.url = mysql://pyramid_user:password@localhost:3306/pyramid_db?charset=utf8&use_unicode=1 sqlalchemy.pool_recycle = 3600
setup.pyで「mysql-python」の追加。
requires = [ 'pyramid', 'SQLAlchemy', 'transaction', 'pyramid_tm', 'pyramid_debugtoolbar', 'zope.sqlalchemy', 'waitress', 'mysql-python', ]
myproject/models.pyで、フィールド型のTextをStringに変更する。
from sqlalchemy import ( Column, Integer, String, )
同じくmyproject/models.pyのモデルのフィールド定義(class MyModel(Base):)のところもTextをStringにする。長さを指定し、uniqueは削除する。
<変更前>
name = Column(Text, unique=True)<変更後>
name = Column(String(200))
testしておく。ここで、ライブラリが読み込まれる。
$ ../bin/python setup.py test -q
$ sudo ln -s /tmp/mysql.sock /opt/local/var/run/mysql55/mysqld.sock
$ ../bin/initialize_MyProject_db development.ini
mysql> show tables; +----------------------+ | Tables_in_pyramid_db | +----------------------+ | models | +----------------------+ 1 row in set (0.00 sec)
mysql> show fields from models; +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(200) | YES | | NULL | | | value | int(11) | YES | | NULL | | +-------+--------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) mysql> select id, name, value from models; +----+------+-------+ | id | name | value | +----+------+-------+ | 1 | one | 1 | +----+------+-------+ 1 row in set (0.00 sec) mysql>
Eclipseから、あるいは次のコマンドで実行するとPyramidのページが表示される。
$ ../bin/pserve development.ini
ここを参考にした。
チラ裏 nginxとpythonとpyramid MySQLの設定 次回は、wsgiでの動作確認。
P.S.
2014.01.24
久しぶりに、新しくプロジェクトを作成してみたところ・・・
initialize_xxxx_db を実行すると「ImportError: No module named MySQLdb」と言われた。
で、MySQLdb をインストールする。
$ bin/pip install MySQL-python
もうあるぞ「Requirement already satisfied (use --upgrade to upgrade): MySQL-python in ./pyramid_xxxx/MySQL_python-1.2.5-py2.7-macosx-10.9-x86_64.egg」、と言われてインストールできない。
プロジェクトのディレクトリをみると「MySQL_python-1.2.5-py2.7-macosx-10.9-x86_64.egg」というファイルがあるので、これを削除してリトライ pip install。
うまくインストールできた。
こちらもよろしく。
Pyramid 1.5 + jinja2-alchemy-starter で MySQL の authentication
0 件のコメント:
コメントを投稿