Python学习
一、学前花絮
我们从事IT行业经常看到“开源”字样,比如现在学习的python是开源的,MySQL数据库是开源的等等。但开源的产品也是有很多不一样的约束。一句话,开源在个人开发使用方面是免费的,但不意味着没有风险。比如MySQL数据库是开源的,个人免费下载使用,但如果用于商业,面临着付费授权或者被制裁断供的风险。
本文以PostgreSQL、MySQL两大开源数据库为例,谈谈二者在开源方面的异同,以及python如何连接PostgreSQL数据库。
二、开源数据库所遵从的协议以及python连接PostgreSQL示例
2.1 MySQL与PostgreSQL对比
PostgreSQL 和 MySQL 作为两大主流开源数据库,在开源协议、商业授权模式以及由此带来的“安全性”和“自由度”上,存在非常本质的区别。二者在“开源”层面,存在以下的异同点:
1. 核心差异:开源协议的本质不同
这是两者最根本的区别,直接决定了你使用它的自由程度和法律风险。
PostgreSQL:宽松的“BSD/MIT”类协议:
l自由度极高: PostgreSQL 采用的是类似 BSD 或 MIT 的宽松开源许可证。
l闭源友好: 你可以自由地使用、修改 PostgreSQL 的代码,并将其集成到你的商业闭源软件中,不需要公开你自己的源代码。
l几乎没有“传染性”: 只要保留原作者的版权声明,你几乎可以随心所欲地使用它,不用担心你的商业产品被强制要求开源。
MySQL:严格的“GPL”协议:
l具有“传染性”: MySQL 采用的是 GNU General Public License (GPL) 协议。
l强制开源: 如果你修改了 MySQL 的源代码,并且要发布(分发)这个修改后的版本,那么根据 GPL 协议,你必须公开你的修改代码。
l商业限制: 如果你开发了一个商业软件,将 MySQL “内嵌”或紧密集成进去(被视为衍生作品),理论上你的商业软件也需要遵循 GPL 协议(即开源)。这对希望保护核心代码隐私的企业是个大麻烦。
2. 商业授权模式的差异
由于协议不同,两者在商业变现和授权获取上走的是两条路:
PostgreSQL:
l无需商业授权: 因为 BSD 协议本身就允许闭源商用,所以你几乎永远不需要向任何人购买“商业授权”来规避开源风险。
l社区驱动: 它主要由社区驱动,没有单一商业公司拥有绝对控制权,因此很难出现“被一家公司制裁”的情况。
MySQL:
l双许可证模式: MySQL 采用“GPL + 商业许可”的双轨制。
l免费版(GPL): 适合开源项目或仅作为独立服务使用(不链接闭源代码)。
l商业版(付费): 如果你不想遵守 GPL 协议(即不想开源你的代码),你就必须向 Oracle(目前所有者)购买商业许可证。
l“断供”风险: 正如我们之前讨论的,如果 Oracle 拒绝向某家公司出售商业许可证,或者撤回授权,这家公司就无法合法地进行商业化升级或分发,这就是所谓的“制裁”风险。
3. 两者在开源方面的相同点
虽然协议不同,但它们在开源领域也有一些共同点:
l都是真正的开源软件: 它们的源代码都是公开的,任何人都可以下载、学习和使用。
l都有庞大的社区: 两者都有非常活跃的全球开发者社区,提供文档、插件和问题支持。
l都有企业支持: 虽然 PostgreSQL 没有单一所有者,但也有如 EnterpriseDB 等公司提供商业支持服务;MySQL 则有 Oracle 提供官方支持。
总结对比表:

2.2 选型建议
l如果你是做企业级应用、或者不想在法律合规上花太多精力、或者担心被“卡脖子”:
PostgreSQL 是更安全、更自由的选择。它没有 GPL 的“传染性”烦恼,不用担心因为集成它而被迫开源核心代码。
l如果你是做 Web 开发、或者你的产品本身就是开源的、或者你愿意支付费用购买商业授权:
MySQL 依然是一个非常成熟稳定的选择,特别是在互联网领域生态非常完善。
一句话总结: 在开源方面,PostgreSQL 给予了你更大的自由度和安全感,而 MySQL 则在商业使用上设定了更严格的法律门槛。
2.3 PostgreSQL数据库软件安装及使用
以windows操作系统举例:
l下载安装包:访问 PostgreSQL 官方网站下载页面,下载适用于 Windows 的安装程序(.exe 文件)。
l运行安装向导:双击安装包,选择安装目录(默认在 C:\Program Files\PostgreSQL\)。
设置密码:在安装过程中,系统会提示你为超级用户 postgres 设置密码,请务必记住该密码。
端口号:默认端口为 5432。
组件选择:建议勾选 pgAdmin 4(图形化管理工具)和 Command Line Tools(命令行工具)。
环境变量:安装完成后,建议将 C:\Program Files\PostgreSQL\[版本号]\bin 添加到系统的 PATH 环境变量中,以便在命令行中直接使用 psql 命令。
PostgreSQL 基础使用:
1.启动客户端:
打开命令行(Terminal 或 cmd),输入以下命令连接到默认数据库:
psql -U postgres -h 127.0.0.1 |
系统会提示输入密码,输入安装时设置的密码即可。
2.常用命令:
\l:列出所有数据库。
\c 数据库名:连接到指定数据库。
\dt:列出当前数据库中的所有表。
\q:退出 psql 客户端。
2.4Python 与 PostgreSQL 接口操作
在 Python 中操作 PostgreSQL,最常用的库是 psycopg2。它是一个 PostgreSQL 适配器,允许 Python 程序与数据库进行交互。
1. 安装依赖库
你需要先安装 psycopg2-binary(二进制版本,安装更简单,适合大多数开发环境):
pip install psycopg2-binary |
2.Python 连接与操作示例
下面是一个完整的 Python 脚本示例,展示了如何连接数据库、创建表、插入数据和查询数据:
import psycopg2 from psycopg2 import sql # 1. 建立数据库连接 # 请确保 PostgreSQL 服务已启动 try: conn= psycopg2.connect( host="localhost",#数据库主机地址 database="postgres",#数据库名 user="postgres",#用户名 password="your_password"# 密码 (请替换为你的实际密码) ) #2. 创建游标对象 #游标用于执行 SQL 命令 cur= conn.cursor() #3. 创建表 (如果不存在) cur.execute(''' CREATETABLE IF NOT EXISTS employees ( idSERIAL PRIMARY KEY, nameVARCHAR(100), salaryINTEGER ); ''') #4. 插入数据 (使用参数化查询,防止 SQL 注入) cur.execute( "INSERTINTO employees (name, salary) VALUES (%s, %s)", ("Alice",7000) ) #注意:修改数据必须提交事务 conn.commit() #5. 查询数据 cur.execute("SELECT* FROM employees WHERE salary > %s", (5000,)) rows= cur.fetchall() print("查询结果:") forrow in rows: print(f"ID:{row[0]}, 姓名: {row[1]}, 薪资: {row[2]}") #6. 关闭资源 cur.close() conn.close() except Exception as e: print(f"数据库操作出错:{e}") |
通过以上程序,我们发现python连接MySQL、Sqlite与PostgreSQL基本相似。之前有文章专门论述了对于python连接MySQL、Sqlite数据库并示例。当然PostgreSQL数据库本身有很多的特性是MySQL所没有的,但对于初学者可以先掌握最基本的建表、查询等功能。从简单做起,逐渐深入。
3. 关键点解析
l连接管理:使用 psycopg2.connect() 建立连接。在生产环境中,建议使用连接池(如 psycopg2.pool)来管理连接,避免频繁创建和销毁连接带来的性能开销。
l参数化查询:在 cur.execute() 中使用 %s 作为占位符,并将实际参数作为元组传递。千万不要直接使用 Python 的字符串格式化(如 f-strings)拼接 SQL 语句,否则会有 SQL 注入风险。
l事务处理:对于 INSERT、UPDATE、DELETE 等修改数据的操作,必须调用 conn.commit() 才能生效。如果发生异常,应调用 conn.rollback() 回滚事务。
l资源释放:操作完成后,务必关闭游标(cur.close())和连接(conn.close())。在实际开发中,推荐使用 with 语句(上下文管理器)来自动管理资源的释放。
总结
l安装:选择合适的安装方式(Windows 安装包、macOS Homebrew、Linux apt)。
l验证:使用 psql 命令行工具连接数据库,确保服务正常运行。
Python 集成:使用 psycopg2 库,通过 connect() 建立连接,利用 cursor 执行 SQL 语句,并注意事务提交和资源释放。
通过以上步骤,就可以在本地搭建起 PostgreSQL 环境,并使用 Python 进行数据操作了。
三、小结
本文通过比较开源数据库MySQL与PostgreSQL的异同,说明一个现实情况:不要以为开源就是安全的!并针对python连接PostgreSQL数据库进行了示例说明。
让我们保持学习热情,多做练习。我们下期再见!