Python工具箱系列(三十)
PostgreSQL
MySQL的口号是“世界上最流行的开源关系型数据库”,而PostgreSQL的Slogan则是“世界上最先进的开源关系型数据库(PostgreSQL: The World's Most Advanced Open Source Relational Database)”,一看这就是一对老冤家了。这两个口号很好的反映出了两者的形象特质:PostgreSQL是功能丰富,高大上的严谨的学院派数据库;MySQL是轻简粗陋,糙猛快的“工程派”数据库。的确,除了MySQL外PostgreSQL(以后简称PG)是我们经常选择的数据库之一。它不仅仅是关系型数据库,同时也添加了对JSON数据的支持、全文检索功能,以及其他扩展。2020年2月的总排名为第四名,关系型数据库中排名第四名。在开源关系型数据库中排名第二,[排名信息参考DB-Engines](https://db-engines.com/en/ranking)。
PostgreSQL的优势
◆功能强大:PG是目前功能最强大的开源数据库。PG多年来在GIS领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap等数据类型。PG的“无锁定”特性非常突出。PG可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。PG有极其强悍的SQL编程能力(9.x图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。PG不仅仅是SQL数据库,它可以存储array和json,可以在array和json上建索引,甚至还能用表达式索引。为了实现文档数据库的功能,设计了jsonb的存储结构。还有很逆天的fdw功能,就是把友商数据库的表当自己的表用。它自带全文搜索功能(不用费劲再装一个elasticsearch)。实现高效的正则搜索,可以高效处理图结构,轻松实现“朋友的朋友的朋友”这种功能。
◆稳定可靠:PG是能够做到数据零丢失的金融级开源数据库。Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多MySQL用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降。
◆开源省钱:PG是完全开源的、免费的。PG协议友善,采用了宽松的类BSD协议。各种数据库厂商,云厂商出品的“自研/国产数据库”,以及很多“云数据库”大多都是基于PostgreSQL改造的。例如最近HW基于PostgreSQL搞openGaussDB就是一个很明智的选择。PG的协议确实允许这样做,而且这样做也确实让PostgreSQL的生态更加繁荣壮大了。卖PostgreSQL衍生版是一个很成熟的市场:传统企业不差钱且愿意为此付费买单。开源天才之火有商业利益之油浇灌,因而源源不断地释放出旺盛的生命力。
◆支持广泛:PG得到了开发语言和各种框架的广泛支持。原生PG对Oracle的功能就做到了八九成的兼容性,因此可以看作是开源版的Oracle。是唯一能对Oracle构成直接威胁的开源关系型数据库,PostgreSQL及其衍生版本的技术优势是压倒性的。
◆社区活跃:PG基本上每三个月推出一个补丁版本,一直在快速升级中。
在ubuntu bionic的安装过程如下:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql postgresql-contrib
sudo systemctl start postgresql # 查看端口是否绑定上
ss -nlt | grep 5432
sudo -u postgres psql -c "SELECT version();"
# 设置口令
sudo -u postgres psql
# 2次输入确认
\password
\q
安装PostgreSQL数据库之后,默认是只接受本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器,就需要进行相应的配置。配置远程连接PostgreSQL数据库的步骤很简单,只需要修改pg_hba.conf和postgresql.conf文件。
# 查找配置文件
find / -name pg_hba.conf
sed -i '$ahost all all 0.0.0.0/0 scram-sha-256' /etc/postgresql/14/main/pg_hba.conf
echo "listen_addresses = '*'" >> /etc/postgresql/14/main/postgresql.conf
systemctl restart postgresql
以上设置完成后,可以使用DBeaver连接数据库进行测试。配置正确的话,则可以看到以下类似的界面。

python有许多库可以访问PG,相对流行的有:
◆Psycopg2
◆pg8000
◆py-postgresql
◆PyGreSQL
◆ocpgdb
◆bpgsql
◆aiopg
目前流行的使用Psycopg2,其安装过程如下:
# 在ubuntu bionic下需要前置安装
sudo apt install python3-dev libpq-dev
pip install psycopg2
数据库操作的示例代码如下:
import psycopg2
import random # 事先创建后数据库demodb
demodb = psycopg2.connect(database="demodb", user="postgres",
password="88488848", host="192.168.0.66", port="5432") # 创建表
democur = demodb.cursor()
sql_createtable = 'create table demotb(id int primary key not null ,pm25 float not null)'
democur.execute(sql_createtable) demodb.commit() # 插入模拟出来的数据。
for id in range(100):
pm25 = random.uniform(0, 300)
insertsql = f'insert into demotb(id,pm25) values({id},{pm25})'
democur.execute(insertsql) demodb.commit() democur.execute("SELECT id,pm25 from demotb where id > 49")
rows = democur.fetchall()
for row in rows:
print(row) democur.close()
demodb.close()
操作方式与mysql很相似,均是基于游标的底层操作,上述代码只是简单示例。此外需要注意的是,SQL虽然是一个标准化的语言,但每个数据库都有自己的方言,以创建表的语句为例,每个数据库的写法大同小异,有的主键支持自动增加,有的主键就不支持,只能够人工写入。
Python工具箱系列(三十)的更多相关文章
- Web 开发人员和设计师必读文章推荐【系列三十】
<Web 前端开发精华文章推荐>2014年第9期(总第30期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- 学习ASP.NET Core Blazor编程系列三十——JWT登录(4)
学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...
- Python学习(三十九)—— Django之Form组件
一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...
- Python学习(三十二)—— Django之视图系统
转载自:http://www.cnblogs.com/liwenzhou/articles/8305104.html Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Pyth ...
- Python学习(三十)—— Django框架简介
转载自:http://www.cnblogs.com/liwenzhou/p/8296964.html Django框架简介 一.MVC框架和MTV框架(了解即可) MVC,全名是Model View ...
- Python学习札记(三十四) 面向对象编程 Object Oriented Program 5
参考:获取对象信息 NOTE 1.type()函数可以用来判断对象的类型: >>> type(123) <class 'int'> >>> type(' ...
- python学习第三十天函数的形参,实参及函数文档
python函数的形参是定义函数def 函数名 小括号里面的变量,实参是调用函数时候的值,函数文档是提供函数功能的开发文档,下面 详细说明系列方法 1,函数的形参 def chan(name): pr ...
- Python工具箱系列(四)
上期描述了如何在Windows下安装官方的Python3.8,本期描述如何安装Anaconda.建立Python环境这个话题,为何要大费周章.不厌其烦的叙述呢,主要的原因是: 所有的语言在设计时,都假 ...
- BizTalk开发系列(三十八)微软BizTalk Server定价和许可[解读]
做BizTalk的项目一段时间了,但是对BizTalk的价格和许可还不是很了解.给客户设计解决方案时大部分产品都是直接按照企业版的功能来设计,很 少考虑到价格和许可方面的因素,以为这个不是我们的事情或 ...
- BizTalk开发系列(三十二)浅谈BizTalk主机性能优化
很多BizTalk的项目都要考虑到性能优化的问题,虽然BizTalk采用多线程处理消息的,大大提高了程序效率.但默认情况下 BizTalk的主机有很多阻止参数会控制BizTalk对服务器的资源使用率, ...
随机推荐
- C++ read 读取字节数与设置不一样
当需要读取二进制文件时,C++可以采用ofstream流,并设置模式为ios::binary,就可以通过read函数进行按照字节读取了. 需要注意的是: 如果模式未进行设置,默认将以文本方式读取,此时 ...
- selenium 模拟鼠标滚轮,滚动到可见的选项
self.wrap_driver.move_to_element(locator=const_xpath.monitor_select) #鼠标移动到某个区域target = self.driver. ...
- 1 关于win10原生系统下 OCRmyPDF安装使用
win10原生系统下 OCRmyPDF安装使用长期以来一直在代替freepic2pdf的工具,因为在图片转化PDF时,如果没有勾选该软件 添加OCR层 选项,印象中事后无法挂OCR层上去.福昕风腾,A ...
- java的数据和表达式
一.基本语法元素 1.空白和注释及语句 (1)空白: 换行符.回车符.空格键.水平定位键(Tab) 编译器会忽略掉多余的空白 作用:增加程序的易读性 (2)注释:主要作用是将代码解释其功能和作用,在编 ...
- 痞子衡嵌入式:MCUBootUtility v2.3.1发布,解决了长久以来非空flash可能无法下载的问题
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3)发布过去3个月了,这一次痞子衡为大家带来了小版本升级v2.3.1(第一次做x.y.z中z级别更新),这个版本主要有两 ...
- 什么是Markdown
什么是markdown? Markdown是一种轻量级标记语言,它允许人们使用已读一些的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档.这种语言吸收了很多在电子邮件中已有的纯文本标 ...
- PicGo+Typora+Github图床配置步骤(一键上传本地图片)
PicGo+Typora+Github图床配置步骤(一键上传本地图片) 一.配置前的准备 首先你需要有一个Github账号[GitHub]. 然后下载PicGo图片上传工具[PicGo]和Typora ...
- Prometheus Alertmanager生产配置趟过的坑总结
简介 Alertmanager 处理由客户端应用程序(如 Prometheus server)发送的警报.它负责去重(deduplicating),分组(grouping),并将它们路由(routin ...
- python基础篇:Python基础知识,帮助初学者快速入门
Python是一种高级编程语言,它易于学习和使用,因此成为了许多人的首选编程语言.本文将介绍Python的基础知识,以帮助初学者快速入门. 安装Python 在开始学习Python之前,您需要安装Py ...
- NX二次开发:保存时导出PDF并打开
该工程为在保存时执行开发的功能,函数入口点ufput.其他还有新建.打开.另存等都可以加入开发的操作,具体看UF_EXIT下的介绍. 用户出口是一个可选特性,允许你在NX中某些预定义的位置(或出口)自 ...