安装 Postgres 与基本配置
Postgres, 或者又称为 PostgreSQL (结尾的小写 s 变成了 SQL) 是一个功能强大的数据库.在 ubuntu 下安装
# apt-get install postgresql
安装完成之后, 系统中会多出一个名为 postgres 的用户, 这个用户用于登录数据库. 但无法直接用该用户在 shell 或 xdm 中登录, 须先用其它用户登录 shell, 然后
su
到该用户. 先为该用户设置一下密码# passwd postgres
me@host:~$ su postgres
Password:
postgres@host:/home/me $
could not change directory to "/home/me"
因为 postgres 这个用户无法读取当前用户的 home 目录. 觉得讨厌的话可以
$ cd /
$ psql
psql (version number)
Type "help" for help.
postgres=# input instructions here
这时 postgres 用户相当于数据库的根用户, 就像 root 用户之于 Linux 系统一样, 直接让应用程序使用 postgres 用户是比较危险的. 下面新建一个用户 "psuser", 密码为 "qwerty"
postgres=# CREATE USER psuser WITH PASSWORD 'qwerty';
CREATE ROLE
然后再建立一个新数据库, 并授权 psuser 这个用户可以使用该数据库
postgres=# CREATE DATABASE mydb;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE mydb TO psuser;
GRANT
如果上面每个句子输入之后没回显结果, 并且交互环境开头变为了
postgres-#
(注意 # 前是一个减号而非等号), 请查看一下句尾的分号是否漏掉了.使用 SQLAlchemy 连接 Postgres
有关 SQLAlchemy 的基本使用请见这里.编写这样一段 Python 代码, 来测试 Postgres 数据库连接是否可用
import sqlalchemy as sqla
import sqlalchemy.orm as sqlorm
from sqlalchemy.ext.declarative import declarative_base as sqla_declarative_base
Base = sqla_declarative_base()
engine = sqla.create_engine('postgresql://psuer:qwerty@localhost:5432/mydb', echo=True)
class Artist(Base):
__tablename__ = 'artist'
artist_id = sqla.Column('id', sqla.Integer, primary_key=True)
name = sqla.Column('name', sqla.String)
Base.metadata.bind = engine
Base.metadata.create_all()
Session = sqlorm.scoped_session(sqlorm.sessionmaker(bind=engine))
def save_artist():
artist = Artist(name='aki misawa')
session = Session()
try:
session.add(artist)
session.flush()
session.commit()
finally:
session.close()
if __name__ == '__main__':
save_artist()
PROTOCOL://USERNAME:PASSWORD@localhost:PORT/DATABASE_NAME
PROTOCOL
: 协议名, 使用 Postgres 则为 postgresUSERNAME
/PASSWORD
: 用户名, 即刚才配置的 psuserPORT
: 端口, Postgres 默认端口为 5432 (想知道怎么修改端口请自行 Google)DATABASE_NAME
: 数据库名, 即刚才配置的 mydb
ImportError: No module named psycopg2
pip
或 easy_install
安装 psycopg2 模块, 或自行下载安装. 安装过程中可能出现编译找不到 Python.h 的情况, 这时需要先安装 python-dev, 如 ubuntu 下使用# apt-get install python-dev
如果上述代码运行一切顺利, 控制台应该输出完整的建表跟增加数据的语句. 之后在 psql 交互环境中执行
postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=# SELECT * FROM artist;
id | name
----+-------------
1 | aki misawa