在 Ubuntu 16.04 上使用 Python 3 和 psycopg 设置 PostgreSQL

PostgreSQL 是一个功能强大的开源关系数据库,经常用于创建、读取、更新和删除 Python Web 应用程序数据。Psycopg2 是一个 PostgreSQL 数据库驱动程序,用作访问 PostgreSQL 服务器的 Python 客户端。这篇文章解释了如何安装 PostgreSQL在 Ubuntu 16.04 上,并在 Python 程序中运行一些基本的 SQL 查询。

我们不会在本教程中介绍对象关系映射器 (ORM),但这些步骤可以用作使用 ORM(例如 SQLAlchemy 或 Peewee)的先决条件。

我们需要的工具

尽管所有步骤都专门针对 Python 3.5 进行了测试,但我们的演练应该适用于 Python 2 或 3。除了 Python 解释器,以下是我们将使用的其他组件:

  • Ubuntu 16.04.2(这些步骤也适用于其他 Ubuntu 版本)
  • pip 和 virtualenv 来处理 psycopg2 应用程序依赖性
  • PostgreSQL

如果您不确定如何安装 pip 和 virtualenv,请查看如何在 Ubuntu 16.04 LTS 上设 Python 3、Bottle 和 Green Unicorn 指南的前几个步骤。

安装 PostgreSQL

我们将通过apt 包管理器安装 PostgreSQL。我们需要一些包,因为我们既要运行 PostgreSQL 又要将 psycopg2 驱动程序与我们的 Python 程序一起使用。 PostgreSQL 也将作为系统服务安装,因此我们可以在需要时使用service 命令启动、停止和重新加载其配置。打开终端并运行:

sudo apt-get install postgresql libpq-dev postgresql-client postgresql-client-common

出现提示时输入您的sudo密码,并在apt询问您是否要安装新软件包时输入“是”。

片刻之后apt 将完成下载、安装和处理。

我们现在已经安装了 PostgreSQL,并且 PostgreSQL 服务正在后台运行。但是,我们需要创建一个用户和一个数据库实例才能真正开始使用它。使用sudo 命令切换到新的“postgres”帐户。

sudo -i -u postgres

在“postgres”帐户中,使用createuser 命令从命令行创建一个用户。 PostgreSQL 会提示您几个问题。对超级用户回答“n”,对其他问题回答“y”。

createuser matt -P --interactive

太棒了,现在我们有一个与我们的 Ubuntu 登录帐户相匹配的 PostgreSQL 用户。通过在 shell 中按“Ctrl”键和“d”退出 postgres 帐户。我们回到了自己的用户帐户。

创建一个我们可以用于测试的新数据库。您可以将其命名为“testpython”或任何您想要的应用程序名称。

createdb testpython

现在我们可以通过 PostgreSQL 命令行工具与“testpython”交互。

与 PostgreSQL 交互

psql 命令行客户端对于直接连接到我们的 PostgreSQL 服务器非常有用,无需任何 Python 代码。在提示符下使用此命令尝试psql

psql testpython

PostgreSQL 客户端将连接到本地主机服务器。客户端现在可以输入了:

尝试使用 PostgreSQL 的命令提示符尝试使用 \dt\dd 等命令。我们还可以运行 SQL 查询,例如“SELECT * from testpython”,尽管这不会返回任何数据,因为我们还没有将任何数据插入到数据库中。可以在 psql 文档中找到完整的 PostgreSQL 命令列表。

安装 psycopg2

现在已经安装了 PostgreSQL 并且我们有一个非超级用户帐户,我们可以安装 psycopg2 包。让我们弄清楚python3 可执行文件的位置,使用python3 创建一个虚拟环境,激活虚拟环境,然后使用pip 安装psycopg2 包。使用 python3 命令查找您的 which 可执行文件。

which python3

我们将看到类似于此屏幕截图中的输出。

在您的主目录或您存储 Python 虚拟环境的任何地方创建一个新的虚拟环境。指定您的python3installation 的完整路径。

# specify the system python3 installation
virtualenv --python=/usr/bin/python3 venvs/postgrestest

激活虚拟环境。

source ~/venvs/postgrestest/bin/activate

接下来我们可以使用 pip 命令从 PyPI 安装 psycopg2 Python 包。

pip install psycopg2

太棒了,我们已经在虚拟环境中安装了 PostgreSQL 驱动程序!我们现在可以通过编写几行 Python 代码来测试安装。

从 Python 使用 PostgreSQL

使用pythonpython3 命令启动Python REPL。您也可以在“testpostgres.py”等 Python 文件中编写以下代码,然后使用python testpostgres.py 执行它。确保用您自己的值替换“用户”和“密码”值。

import psycopg2

try:
    connect_str = "dbname='testpython' user='matt' host='localhost' " + \
                  "password='myOwnPassword'"
    # use our connection values to establish a connection
    conn = psycopg2.connect(connect_str)
    # create a psycopg2 cursor that can execute queries
    cursor = conn.cursor()
    # create a new table with a single column called "name"
    cursor.execute("""CREATE TABLE tutorials (name char(40));""")
    # run a SELECT statement - no data in there, but we can try it
    cursor.execute("""SELECT * from tutorials""")
    conn.commit() # <--- makes sure the change is shown in the database
    rows = cursor.fetchall()
    print(rows)
    cursor.close()
    conn.close()
except Exception as e:
    print("Uh oh, can't connect. Invalid dbname, user or password?")
    print(e)

当我们运行上面的代码时,我们不会得到任何花哨的东西,只会打印出一个空列表。然而,在这几行代码中,我们确保了与新数据库的连接正常,我们可以在其中创建新表并查询它们。

这足以您开始使用 psycopg2 和 PostgreSQL 编写更复杂的 SQL 查询。请务必查看 PostgreSQL、关系数据库和对象关系映射器 (ORM) 页面以获取更多教程。

有问题吗?发送推文@fullstackpython 或在 Full Stack Python Facebook 页面上发布消息。

看到这篇文章有什么问题了吗?在 GitHub 上创建此页面的源代码并提交拉取请求。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏