刚刚研究了下postgreSQL,恰好最近一段时间又在学习python3框架Django,Django框架默认的是用SQLite数据库。于是试着改用postgreSQL数据库,简单记录一下做个笔记(我用的是mac电脑,PostgreSQL 9.5.5版本,Django 1.11版本):
1.Django框架连接postgreSQL数据库使用的是psycopg2。所以要先安装python框架psycopg2。安装直接用命令:pip3 install psycopg2就可以了。注意一点:安装之前要把postgreSQL安装目录下的bin目录放到PATH环境变量里面。我的是:
否则会报错误:Error:pg_config executable not found(好像给是这个错误,记不清了)
2.配置Django项目的settings.py文件,修改DATABASES配置项如下:
DATABASES = {
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2',
'NAME':'testdb',#数据库名字
'USER':'python3learner',#登录用户名
'PASSWORD':'123456789',
'HOST':'127.0.0.1',#数据库IP地址
'PORT':'5432',
}
}
另外Django官方对postgreSQL数据库的连接有这些优化建议:
具体翻译如下:
优化PostgreSQL的配置
Django的数据库连接需要以下参数:
(1).client_encoding:’UTF8’,
(2).default_transaction_isolation:默认读取提交,或者在连接选项中设置的值(见下面)
(3).timezone:当USE_TZ为True时为“UTC”,否则为TIME_ZONE的值。
如果这些参数已经具有正确的值,Django将不会为每个新连接设置它们,这会稍微提高性能。 您可以直接在postgresql.conf中配置它们,或者更方便的是每个具有ALTER ROLE的数据库用户。
Django将工作正常没有这个优化,但每个新的连接将做一些额外的查询设置这些参数。
我的数据库就直接在postgreSQL数据库的数据目录下的postgresql.conf文件里面设置了。
3.当数据可配置完成之后,直接运行
python manage.py makemigrations
python manage.py migrate
但是运行时可能会报错。
YZQ-MacBook-Pro:zqxt_admin yinzeqiang$ python3 manage.py makemigrations
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Django-1.11-py3.5.egg/django/db/backends/postgresql/base.py", line 20, in <module>
import psycopg2 as Database
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/__init__.py", line 50, in <module>
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/_psycopg.cpython-35m-darwin.so, 2): Library not loaded: libssl.1.0.0.dylib
Referenced from: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/_psycopg.cpython-35m-darwin.so
Reason: image not found
在谷歌上搜索了好久,说的巨麻烦,结果想了个简单办法:直接把postgreSQL安装目录下lib目录下的libssl.1.0.0.dylib文件拷贝的/usr/lib目录下搞定:
cp /Users/yinzeqiang/softDev/pgsql/lib/libssl.1.0.0.dylib /usr/lib/libssl.1.0.0.dylib
YZQ-MacBook-Pro:zqxt_admin yinzeqiang$ python3 manage.py makemigrations
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/Django-1.11-py3.5.egg/django/db/backends/postgresql/base.py", line 20, in <module>
import psycopg2 as Database
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/__init__.py", line 50, in <module>
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/_psycopg.cpython-35m-darwin.so, 2): Library not loaded: libcrypto.1.0.0.dylib
Referenced from: /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/psycopg2/_psycopg.cpython-35m-darwin.so
Reason: image not found
解决方法也是把libcrypto.1.0.0.dylib文件拷贝到/usr/lib目录下:
cp /Users/yinzeqiang/softDev/pgsql/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.1.0.0.dylib
这两个错误解决之后基本就可以直接运行:
python manage.py makemigrations
python manage.py migrate
也不会报错了。
(至于Django项目settings.py文件在哪,怎么定义数据库模型,这些问题不是本文的重点,不懂得先找些python的Django教程学习下吧,这里只是说明下Django连接postgreSQL时的配置以及当中会出现的问题。另外对于下面的两个错误如果谁有更好的解决方案也麻烦分享下。本人是python菜鸟,如有错误请指出,谢谢)