Using PostgreSQL for Flask

Posted by Gloomymoon on 2016-11-25

1 安装PostgreSQL

从官网下载windows install,直接安装,默认用户为postgres,密码一定需要设置。
在pgAdmin中新建数据库StudiousPrime

2 安装Python驱动

Unofficial Windows Binaries for Python Extension Packages 下载预编译好的psycopg2-2.6.2-cp27-cp27m-win32.whl包,通过pip安装。

正常情况下安装成功(windows server 2008 64bit、Python 2.7.10 32bi、非virtualenv、已预装PostgreSQL)

1
2
3
Processing d:\tools\python\psycopg2-2.6.2-cp27-cp27m-win32.whl
Installing collected packages: psycopg2
Successfully installed psycopg2-2.6.2

但是在开发笔记本(windows 7 32bit、Python 2.7.9 32bit、virtualenv环境)上安装出现如下错误:UnsupportedWheel: psycopg2-2.6.2-cp27-cp27m-win32.whl is not a supported wheel on this platform.

开始怀疑是没有安装PostgreSQL,但是安装完后依然出现上述错误。
通过搜索后,从http://www.stickpeople.com/projects/python/win-psycopg/下载psycopg2-2.6.2.win32-py2.7-pg9.5.3-release.exe,然后使用easy_install安装成功。也可以使用https://github.com/nwcell/psycopg2-windows介绍的方式使用pip在virtualenv下安装。

3 配置Flask

config.py中,将SQLALCHEMY_DATABASE_URI修改为PostgreSQL的地址,替换其中的username(默认为postgres)和passwordhost为数据库IP或域名。:

1
postgresql://username:password@host/StudiousPrime

Flask重启后,连接数据库出现如下错误:

1
org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host

搜索问题后发现是因为PostgreSQL数据库为了安全,默认只会监听本地的连接请求,而我是访问服务器上的数据库。要解决这个问题,需要在服务器端PostgreSQL安装目录下找到\data\pg_hba.conf文件,打开找到其中# IPv4 local connections:段,添加请求连接机器的IP。

1
2
3
# IPv4 local connections:
host all all 127.0.0.1/32 md5
host all all 请求连接机器的IP/32 md5

在pgAdmin中Reload Configuration后,客户端就能顺利连接服务器上数据库了,剩下的工作就和SQLite一样交给SQLAlchemy就好。