当前位置: 首页 > news >正文

【Python百日进阶-Web开发-Peewee】Day244 - 数据库 Postgresql、CockroachDB

文章目录

  • 六、数据库
    • 6.1 初始化数据库
    • 6.2 使用 Postgresql
      • 6.2.1 隔离级别
    • 6.3 使用 CockroachDB

六、数据库

http://docs.peewee-orm.com/en/latest/peewee/database.html
PeeweeDatabase对象表示与数据库的连接。该类Database使用打开数据库连接所需的所有信息进行实例化,然后可用于:

  • 打开和关闭连接。
  • 执行查询。
  • 管理事务(和保存点)。
  • 内省表、列、索引和约束。
    Peewee 支持 SQLite、MySQL 和 Postgres。每个数据库类都提供了一些基本的、特定于数据库的配置选项。
from peewee import *# SQLite database using WAL journal mode and 64MB cache.
sqlite_db = SqliteDatabase('/path/to/app.db', pragmas={'journal_mode': 'wal','cache_size': -1024 * 64})# Connect to a MySQL database on network.
mysql_db = MySQLDatabase('my_app', user='app', password='db_password',host='10.1.0.8', port=3306)# Connect to a Postgres database.
pg_db = PostgresqlDatabase('my_app', user='postgres', password='secret',host='10.1.0.9', port=5432)

Peewee 通过特定于数据库的扩展模块为 SQLite、Postgres 和 CockroachDB 提供高级支持。要使用扩展功能,请导入适当的特定于数据库的模块并使用提供的数据库类:

from playhouse.sqlite_ext import SqliteExtDatabase# Use SQLite (will register a REGEXP function and set busy timeout to 3s).
db = SqliteExtDatabase('/path/to/app.db', regexp_function=True, timeout=3,pragmas={'journal_mode': 'wal'})from playhouse.postgres_ext import PostgresqlExtDatabase# Use Postgres (and register hstore extension).
db = PostgresqlExtDatabase('my_app', user='postgres', register_hstore=True)from playhouse.cockroachdb import CockroachDatabase# Use CockroachDB.
db = CockroachDatabase('my_app', user='root', port=26257, host='10.1.0.8')# CockroachDB connections may require a number of parameters, which can
# alternatively be specified using a connection-string.
db = CockroachDatabase('postgresql://...')

有关数据库扩展的更多信息,请参见:

  • Postgresql 扩展
  • SQLite 扩展
  • Cockroach数据库
  • Sqlcipher 后端(加密的 SQLite 数据库)。
  • apsw,一个高级的 sqlite 驱动程序
  • SqliteQ

6.1 初始化数据库

初始化方法需要数据库的Database名称作为第一个参数。后续的关键字参数在建立连接时传递给底层数据库驱动程序,允许您轻松传递特定于供应商的参数。

例如,对于 Postgresql,通常需要在创建连接时指定host, user和。password这些不是标准的 Peewee参数,所以在创建连接时Database会直接传回 :psycopg2

db = PostgresqlDatabase('database_name',  # Required by Peewee.user='postgres',  # Will be passed directly to psycopg2.password='secret',  # Ditto.host='db.mysite.com')  # Ditto.

作为另一个示例,pymysql驱动程序接受charset不是标准 Peewee参数的Database参数。要设置此值,只需charset与其他值一起传入:

db = MySQLDatabase('database_name', user='www-data', charset='utf8mb4')

有关可用参数,请参阅数据库驱动程序的文档:

  • Postgres:psycopg2
  • MySQL:MySQL数据库
  • MySQL:pymysql
  • SQLite:sqlite3
  • CockroachDB:参见psycopg2

6.2 使用 Postgresql

要连接到 Postgresql 数据库,我们将使用 PostgresqlDatabase. 第一个参数始终是数据库的名称,之后您可以指定任意psycopg2 参数。

psql_db = PostgresqlDatabase('my_database', user='postgres')class BaseModel(Model):"""A base model that will use our Postgresql database"""class Meta:database = psql_dbclass User(BaseModel):username = CharField()

Playhouse,Peewee的扩展包含一个Postgresql 扩展模块,它提供了许多 postgres 特定的功能,例如:

  • 数组
  • HStore
  • JSON
  • 服务器端游标
  • 更多!
    如果您想使用这些很棒的功能,请使用 PostgresqlExtDatabase模块中的playhouse.postgres_ext:
from playhouse.postgres_ext import PostgresqlExtDatabasepsql_db = PostgresqlExtDatabase('my_database', user='postgres')

6.2.1 隔离级别

从 Peewee 3.9.7 开始,可以使用以下符号常量将隔离级别指定为初始化参数psycopg2.extensions:

from psycopg2.extensions import ISOLATION_LEVEL_SERIALIZABLEdb = PostgresqlDatabase('my_app', user='postgres', host='db-host',isolation_level=ISOLATION_LEVEL_SERIALIZABLE)

笔记

在旧版本中,您可以手动设置底层 psycopg2 连接的隔离级别。这可以一次性完成:

db = PostgresqlDatabase(...) 
conn = db.connection()  # returns current connection.from psycopg2.extensions import ISOLATION_LEVEL_SERIALIZABLE 
conn.set_isolation_level(ISOLATION_LEVEL_SERIALIZABLE) 

要在每次创建连接时运行它,子类化并实现_initialize_database()为此目的而设计的钩子:

class SerializedPostgresqlDatabase(PostgresqlDatabase):def _initialize_connection(self, conn):conn.set_isolation_level(ISOLATION_LEVEL_SERIALIZABLE)

6.3 使用 CockroachDB

CockroachDatabase使用以下定义的数据库类连接到 CockroachDB (CRDB) playhouse.cockroachdb:

from playhouse.cockroachdb import CockroachDatabasedb = CockroachDatabase('my_app', user='root', port=26257, host='localhost')

如果您使用Cockroach Cloud,您可能会发现使用连接字符串指定连接参数更容易:

db = CockroachDatabase('postgresql://root:secret@host:26257/defaultdb...')

笔记

CockroachDB 需要psycopg2(postgres) Python 驱动程序。

笔记

CockroachDB 安装和入门指南可以在这里找到:https
😕/www.cockroachlabs.com/docs/stable/install-cockroachdb.html

CRDB 提供客户端事务重试,可使用特殊的CockroachDatabase.run_transaction()辅助方法获得。此方法接受一个可调用对象,该可调用对象负责执行任何可能需要重试的事务语句。

最简单的例子run_transaction():

def create_user(email):# Callable that accepts a single argument (the database instance) and# which is responsible for executing the transactional SQL.def callback(db_ref):return User.create(email=email)return db.run_transaction(callback, max_attempts=10)huey = create_user('huey@example.com')

笔记

如果在给定的cockroachdb.ExceededMaxAttempts尝试次数后无法提交事务,则会引发异常。如果 SQL
格式错误、违反约束等,则该函数将向调用者引发异常。

有关更多信息,请参阅:

  • CRDB 扩展文档
  • 使用 CockroachDB 进行 SSL 配置
  • 数组(特定于 postgres,但适用于 CRDB)
  • JSON(特定于 postgres,但适用于 CRDB)

相关文章:

【Python百日进阶-Web开发-Peewee】Day244 - 数据库 Postgresql、CockroachDB

文章目录 六、数据库6.1 初始化数据库6.2 使用 Postgresql6.2.1 隔离级别 6.3 使用 CockroachDB 六、数据库 http://docs.peewee-orm.com/en/latest/peewee/database.html PeeweeDatabase对象表示与数据库的连接。该类Database使用打开数据库连接所需的所有信息进行实例化&…...

Vue 中的列表渲染

Vue 中的列表渲染 在 Vue 中,列表渲染是非常常见的操作。它允许我们将一个数组中的数据渲染为一个列表,从而实现数据的展示和交互。在本文中,我们将探讨 Vue 中的列表渲染的基本原理和用法,并给出一些实例代码来帮助读者更好地理…...

java 中的关键字

1. 面向对象编程(OOP) - 把程序中的实体看做对象,而不是过程或函数。OOP有3个基本特征:封装,继承和多态。 2. 类(Class) - 一个用于描述对象属性和方法的蓝图。 3. 对象(Object) - 类的实例化,也就是一个具体的实体。 4. 方法(Met…...

python序列化和结构化数据详解

序列化和结构化数据是计算机程序中非常重要的概念,它们的原理和应用在许多应用程序中都是必不可少的。Python作为一种高级编程语言,在序列化和结构化数据方面提供了很多优秀的解决方案。在本文中,我们将详细介绍Python中序列化和结构化数据的…...

PoseiSwap的趋势性如何体现?

DEX 代表了一种先进的意识形态,相对于 CEX 其更强调无许可、去中心化以及公开透明。然而随着 DeFi 赛道逐渐从 2021 年年底的高峰逐渐转向低谷,DEX 整体的交易量、TVL等数据指标也开始呈现下滑的趋势,DEX 正在面临发展的新瓶颈期。 在这样的背…...

西南交通大学智能监测 培训课程练习4

2023.056.07和09培训 项目实战 目录 一、infracore(基础核心层) 1.1database 1.2config 1.3util 二、业务领域模块 2.1structure模块 2.1.1domain层 2.1.2application层 2.1.3adapter层 2.2sensor模块 2.2.1domian层 2.2.2application层 2.2.…...

设备树的引入及简明教程

首先说明,设备树不可能用来写驱动。 设备树只是用来给内核里的驱动程序,指定硬件的信息。比如LED驱动,在内核的驱动程序里去操作寄存器,但是操作哪一个引脚?这由设备树指定。 需要编写设备树文件(dts: device tree s…...

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件

MM32F3273G8P火龙果开发板MindSDK开发教程12 -获取msa311加速器的敲击事件 1、功能描述 msa311可以识别单击、双击事件,类似手机上的点击返回,双击截屏功能。 单击,双击都能产生中断事件。 中断事件产生后,从对应的状态寄存器读…...

Maven聚合

在实际的开发过程中,我们所接触的项目一般都由多个模块组成。在构建项目时,如果每次都按模块一个一个地进行构建会十分得麻烦,Maven 的聚合功能很好的解决了这个问题。 聚合 使用 Maven 聚合功能对项目进行构建时,需要在该项目中…...

[架构之路-211]- 需求- 软架构前的需求理解:ADMEMS标准化、有序化、结构化、层次化需求矩阵 =》需求框架

目录 前言: 一、什么是ADMES: 首先,需求是分层次的: 其次,需求是有结构的,有维度的 再次,不同层次需求、不同维度需求之间可以相互转化(难点、经验积累) 最终,标准…...

基于前推回代法的连续潮流计算研究【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【双向链表】

双向链表 带头双向循环链表的实现1. 函数的声明2. 函数的实现3. 主函数测试 带头双向循环链表的实现 今天我们来实现一下带头双向循环链表,顾名思义,带头就是有哨兵位,哨兵位不是链表的头,它是连接头节点的一个节点,方…...

POSTGRESQL NEON - Serverless 式的POSTGRESQL 数据库的独特技能 分支数据

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…...

数据分布——长尾分布的处理

前言 长尾分布在分类任务中会提到这个名,这是因为长尾分布这个现象问题会导致在训练过程中会出现出错率高的问题,影响了实验结果。 这里要说的是,长尾分布是一种现象,有的地方说是一种理论或定律,我感觉这样说不太确切&#xff0…...

集合导题、刷题、考试全套完整流程,专业强大的功能,提高刷题学习效率和企业的培训效率

土著刷题微信小程序v1.15,主要是迭代了考试模块的进阶功能,对考试模块进行了一次升级改造。 由于在v1.15开发期间,收到了违规内容整改的通告,为了遵守相关法律法规,让小程序能够平稳安全地运营下去,我们特此…...

【机器学习】采样方法

文章目录 采样方法11.1 简介11.2 常见采样方法11.2.1 均匀分布采样11.2.2 逆变换采样11.2.3 拒绝采样11.2.4 重要采样11.2.5 Metropolis方法11.2.6 Metropolis-Hasting 算法11.2.7 吉布斯采样 采样方法 11.1 简介 什么是采样 从一个分布中生成一批服从该分布的样本&#xff0c…...

Seata TCC 模式理论学习、生产级使用示例搭建及注意事项 | Spring Cloud55

一、前言 通过以下系列章节: docker-compose 实现Seata Server高可用部署 | Spring Cloud 51 Seata AT 模式理论学习、事务隔离及部分源码解析 | Spring Cloud 52 Spring Boot集成Seata利用AT模式分布式事务示例 | Spring Cloud 53 Seata XA 模式理论学习、使用…...

一文详解:Vue3中使用Vue Router

目录 安装和配置Vue Router安装Vue Router配置Vue Router Vue Router的基本概念Vue Router 的配置项介绍routes中的配置项介绍 路由跳转使用 router-link组件使用router.push函数 路由传参动态路由嵌套路由命名路由路由守卫全局路由守卫路由独享守卫 路由懒加载使用import()方式…...

C++开发—远程控制

C开发—远程控制 一,准备二,安装版本控制工具1,安装gitforwindows2,安装乌龟git1,安装乌龟git应用2,安装乌龟git对应的语言包 3,设置Visual Studio的git插件4,创建git项目 三&#x…...

【Python基础】Python数据容器(集合)

文章目录 数据容器:set(集合)集合的定义集合的常用操作-修改(1)添加新元素(2)移除元素(3)从集合中随机取出元素(4)清空集合(5)取出 两个集合的差集(6)消除 两个集合的差集(7)两个集合 合并(8)统计集合元素数量len()(9)集合的遍历 集合的特点 …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

Robots.txt 文件

什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...