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工具箱系列(三十)

 

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虽然是一个标准化的语言,但每个数据库都有自己的方言,以创建表的语句为例,每个数据库的写法大同小异,有的主键支持自动增加,有的主键就不支持,只能够人工写入。

原文链接:https://www.cnblogs.com/shanxihualu/p/17380774.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python工具箱系列(三十) - Python技术站

(0)
上一篇 2023年5月8日
下一篇 2023年5月8日

相关文章

  • python实现简单神经网络算法

    下面是“Python实现简单神经网络算法”的完整攻略: 1. 简介 神经网络算法是一种借鉴生物神经系统运作方式,对大量信息进行分析、处理的一种模型。通过模拟人脑神经元之间的联系,处理输入、输出信息的过程。 在Python中可以使用Keras库对神经网络进行简单的实现。Keras是用Python编写的高级神经网络API,它能够快速地在TensorFlow、Th…

    python 2023年6月3日
    00
  • python中subplot大小的设置步骤

    在Python中,matplotlib是一个广泛使用的数据可视化工具。在绘制子图时,使用subplot函数可以将多个子图画在同一张图表上。通常情况下,我们需要设置子图的大小,以适应不同的需求。在本篇文章中,我将分享python中设置子图大小的步骤及示例说明。 步骤 设置子图大小的步骤如下所示: 引入必要的包: import matplotlib.pyplot…

    python 2023年5月18日
    00
  • Python实现孤立随机森林算法的示例代码

    欢迎阅读本文,本文将详细讲解如何用 Python 实现孤立随机森林算法,并提供示例代码。 1. 了解孤立森林算法 孤立森林算法是一种用来检测异常值的算法。它基于随机森林的思想,通过构建随机森林进行异常值的检测。孤立森林算法的核心思想是,异常值在随机树中的深度较浅,正常值在随机树中的深度较深。 2. 孤立森林算法的实现步骤 2.1 数据预处理 首先需要对数据进…

    python 2023年6月3日
    00
  • Python利用format函数实现对齐打印(左对齐、右对齐与居中对齐)

    下面是关于“Python利用format函数实现对齐打印(左对齐、右对齐与居中对齐)”的详细攻略。 1. 格式化字符串 在Python中,我们可以使用format函数对字符串进行格式化,例如: name = "Tom" age = 18 print("My name is {}, I’m {} years old.".…

    python 2023年6月5日
    00
  • Python文件路径名的操作方法

    以下是关于Python文件路径名操作方法的完整攻略。 一、路径基础 在Python中,我们可以使用字符串来表示文件路径。在定义文件路径时,需要特别指定路径分隔符(Windows 系统为反斜杠“\”,Linux和macOS 系统为正斜杠“/”)。 例如,在Windows系统下,我们可以这样定义一个路径: path = ‘C:\\Users\\username\…

    python 2023年6月2日
    00
  • 使用Python实现批量ping操作方法

    使用Python实现批量ping操作方法的攻略如下: 安装必要的Python库 首先需要在你的机器上安装必要的Python库,其中最重要的是Python的ping库。命令行安装ping库可以采用如下命令: pip install ping3 生成IP列表 生成IP列表的方法有很多,这里我们介绍手动输入IP地址的方法。使用Python的input()方法获取用…

    python 2023年5月23日
    00
  • Python抓取网页图片难点分析

    Python抓取网页图片难点分析 1. 资源定位 要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式: 1.1 直接获取源代码中的图片链接 在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。 示例代…

    python 2023年6月3日
    00
  • 基于python实现简单C/S模式代码实例

    下面是详细的攻略: 简介 C/S模式是计算机网络中常见的模式之一,它指的是Client-Server模式,即客户端-服务器模式。在这种模式下,服务器端提供服务,客户端向服务器发起请求并接受服务。在本攻略中,我们将使用Python实现一个简单的C/S模型。 基础知识 在开始之前,我们需要掌握以下基础知识: socket模块:用于实现网络通信; threadin…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部