Python3环境下使用Wheel安装psycopg2及环境配置详解
本文详细记录了在Windows 7环境下,针对Python3安装psycopg2时遇到的常见坑点。通过官方文档指引,采用Wheel二进制包方式简化安装流程。重点解决了Anaconda环境下pip命令不可用的环境变量配置问题,并补充了非Anaconda版本Python中pip缺失的修复方案及SQL注入防护机制说明。
psycopg2安装困境与Wheel方案选择
此前在网络搜索了大量关于在Python中安装psycopg2的资料,发现诸多文章提及安装过程中的各种障碍与失败案例,令人困扰。经过一下午的尝试未果后,决定稍作休息。晚餐后,重新查阅psycopg2官网(http://initd.org/psycopg/docs/install.html)的安装指南,仍觉得步骤繁琐。最终访问PyPI仓库(https://pypi.python.org/pypi/psycopg2/),决定尝试通过Wheel方式进行安装。
在该网页上注意到一条关键提示:

其含义为:“若你的pip版本支持Wheel包,则只需使用pip命令即可安装包含所有依赖项的二进制版Psycopg”。这一发现令人振奋。
Anaconda环境下的pip路径配置
然而,由于Windows 7系统中安装的Python未配置环境变量,一直依赖Anaconda下的Spyder图形界面进行编程,导致命令行无法直接调用python。首先需在系统环境变量的Path中添加“C:\Users\Tom\Anaconda3”,即Anaconda3的安装目录(因Python通过Anaconda安装)。随后在命令行运行pip,发现仍无法识别,检查后发现pip位于Anaconda文件夹下的Scripts目录中。因此,还需将“C:\Users\Tom\Anaconda3\Scripts”添加到环境变量,此后即可在命令行中正常使用pip命令。




至此,psycopg2安装成功。
接下来查看在Spyder中操作PostgreSQL数据库的Python代码及其运行结果:

上述Python代码连接至articles数据库,并创建名为Urls的数据表,该表包含两个字段:ID和URL。打开pgAdmin4查看,发现articles数据库中确实出现了Urls数据表,且包含刚才创建的两个字段。具体见下表:

------------------------------------------------------------------------------------
非Anaconda版本Python的pip缺失处理
若不使用Anaconda安装包,而是直接安装Python.org官网提供的安装包,安装完成后将不存在pip.exe文件。此时需在Python窗口中执行特定命令,随后在Scripts文件夹下即可看到新生成的几个pip相关文件。



需要注意的是,pip3文件并非最新版本,直接下载可能导致错误,需先对pip进行更新。但在更新过程中可能会遇到错误,建议多次尝试,最终通常会成功。
更新完成后,即可按照之前的方法继续下载。
内容扩展:
Python——使用psycopg2操作PostgreSQL
psycopg2安全特性与DB API兼容
Psycopg2与其他实现DB API 2.0协议的数据库接口基本一致。当执行包含特殊字符的SQL语句时,通过传递数据来填充查询占位符,由Psycopg执行正确的转换,从而避免SQL注入风险。
# encoding: utf-8
__author__ = 'chenlong'
import psycopg2
from config import ConfigServer
class PGSQLdb:
def __init__(self):
self.tryconnect()
def tryconnect(self):
# 连接到数据库
self.con=psycopg2.connect(database = ConfigServer['pg_db'],
user = ConfigServer['pg_user'],
password = ConfigServer['pg_pass'],
host= ConfigServer['pg_host'],
port = ConfigServer['pg_port'])
# 打开一个光标,用来执行数据库操作
self.cur=self.con.cursor()
def tryexecute(self,sqlstr):
# 执行命令
self.cur.execute(sqlstr)
# 使改变永久存入数据库
self.con.commit()
def tryexecute2(self,sqlstr,data):
# 传递数据用来填充查询占位符, 让Psycopg执行正确的转换(不再有SQL注入)
# 第一个参数:包含占位符的SQL语句,如:"INSERT INTO test (num, data) VALUES (%s, %s)"
# 第二个参数:与占位符对应的值,如: (100, "abc'def")
self.cur.execute(sqlstr,data)
self.con.commit()
def tryclose(self):
# 关闭光标
self.cur.close()
# 关闭连接
self.con.close()
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













