Python与数据库:SQLite、MySQL、PostgreSQL详解

【MySql】SQLite和MySQL的区别 相比之下,SQLite是一个嵌入式数据库,所有数据库的内容都存储在一个文件中,不需要一个运行在服务器上的数据库服务程序。而当你使用Navicat打开一个SQLite数据库文件时,你实际上是让Navicat直接读取和操作这个SQLite数据库文件,没有涉及到与任何数据库服务的通信,所以并不需要安装SQLite服务。SQLite:SQLite 是一种嵌入式数据库,它的数据库就是一个文件,不需要单独的数据库服务器,非常适合于小型应用,如桌面软件、嵌入式软件等。不过两者都非常有用,选择哪一个取决于你的项目需求。 阅读详情

Python与数据库:SQLite、MySQL、PostgreSQL详解

前言

大家好,我是第一程序员(名字大,人很菜)。作为一个非科班转码、正在学习Rust和Python的萌新,最近我开始学习Python与数据库的交互。说实话,一开始我对数据库的概念还很模糊,但随着学习的深入,我发现数据库是编程中非常重要的一部分。今天我想分享一下我对Python与数据库交互的学习心得,希望能给同样是非科班转码的朋友们一些参考。

一、SQLite数据库

1.1 SQLite简介

SQLite是一个轻量级的嵌入式数据库,它不需要单独的服务器进程,数据存储在一个文件中:

  • 轻量级:核心库很小,适合嵌入式应用
  • 无需配置:不需要安装和配置服务器
  • 跨平台:支持多种操作系统
  • ACID兼容:支持原子性、一致性、隔离性、持久性

1.2 使用sqlite3模块

Python内置了sqlite3模块,可以直接与SQLite数据库交互:

import sqlite3

# 连接到SQLite数据库
# 如果数据库不存在,会自动创建
conn = sqlite3.connect('example.db')

# 创建游标
cursor = conn.cursor()

# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
)
''')

# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Bob', 30, 'bob@example.com'))

# 提交事务
conn.commit()

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 更新数据
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
conn.commit()

# 删除数据
cursor.execute("DELETE FROM users WHERE name = ?", ('Bob',))
conn.commit()

# 关闭连接
conn.close()

1.3 使用SQLite的优势

  • 无需安装:Python内置支持
  • 易于使用:API简单直观
  • 适合小型应用:适合数据量不大的应用
  • 便于测试:适合单元测试和集成测试

二、MySQL数据库

2.1 MySQL简介

MySQL是一个流行的关系型数据库管理系统:

  • 功能强大:支持复杂的SQL语句和事务
  • 可扩展性:适合大型应用
  • 社区活跃:有庞大的社区支持
  • 开源免费:开源软件,免费使用

2.2 使用pymysql库

需要安装pymysql库来与MySQL数据库交互:

# 安装pymysql
# pip install pymysql

import pymysql

# 连接到MySQL数据库
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='password',
    database='test',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

# 创建游标
cursor = conn.cursor()

# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT,
    email VARCHAR(255) UNIQUE
)
''')

# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Bob', 30, 'bob@example.com'))

# 提交事务
conn.commit()

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 更新数据
cursor.execute("UPDATE users SET age = %s WHERE name = %s", (26, 'Alice'))
conn.commit()

# 删除数据
cursor.execute("DELETE FROM users WHERE name = %s", ('Bob',))
conn.commit()

# 关闭连接
conn.close()

2.3 使用MySQL的优势

  • 适合大型应用:支持高并发和大数据量
  • 功能丰富:支持复杂的SQL语句和存储过程
  • 生态成熟:有丰富的工具和库
  • 社区支持:有庞大的社区和文档

三、PostgreSQL数据库

3.1 PostgreSQL简介

PostgreSQL是一个功能强大的开源关系型数据库:

  • 高级特性:支持复杂的数据类型和查询
  • 可扩展性:支持自定义数据类型和函数
  • 可靠性:具有强大的事务支持和数据完整性
  • 开源免费:开源软件,免费使用

3.2 使用psycopg2库

需要安装psycopg2库来与PostgreSQL数据库交互:

# 安装psycopg2
# pip install psycopg2-binary

import psycopg2

# 连接到PostgreSQL数据库
conn = psycopg2.connect(
    host='localhost',
    user='postgres',
    password='password',
    database='test',
    port=5432
)

# 创建游标
cursor = conn.cursor()

# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INTEGER,
    email VARCHAR(255) UNIQUE
)
''')

# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Bob', 30, 'bob@example.com'))

# 提交事务
conn.commit()

# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
    print(row)

# 更新数据
cursor.execute("UPDATE users SET age = %s WHERE name = %s", (26, 'Alice'))
conn.commit()

# 删除数据
cursor.execute("DELETE FROM users WHERE name = %s", ('Bob',))
conn.commit()

# 关闭连接
conn.close()

3.3 使用PostgreSQL的优势

  • 高级特性:支持JSON、数组等复杂数据类型
  • 可扩展性:支持自定义数据类型和函数
  • 可靠性:具有强大的事务支持和数据完整性
  • 安全性:具有强大的安全特性

四、使用ORM框架

4.1 SQLAlchemy

SQLAlchemy是一个流行的Python ORM框架:

# 安装SQLAlchemy
# pip install SQLAlchemy

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# 创建数据库引擎
# SQLite
engine = create_engine('sqlite:///example.db')
# MySQL
# engine = create_engine('mysql+pymysql://root:password@localhost/test')
# PostgreSQL
# engine = create_engine('postgresql://postgres:password@localhost/test')

# 创建基类
Base = declarative_base()

# 定义模型
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(255), nullable=False)
    age = Column(Integer)
    email = Column(String(255), unique=True)

# 创建表
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 插入数据
user1 = User(name='Alice', age=25, email='alice@example.com')
user2 = User(name='Bob', age=30, email='bob@example.com')
session.add(user1)
session.add(user2)
session.commit()

# 查询数据
users = session.query(User).all()
for user in users:
    print(user.id, user.name, user.age, user.email)

# 更新数据
user = session.query(User).filter_by(name='Alice').first()
user.age = 26
session.commit()

# 删除数据
user = session.query(User).filter_by(name='Bob').first()
session.delete(user)
session.commit()

# 关闭会话
session.close()

4.2 Django ORM

Django ORM是Django框架内置的ORM:

# models.py
from django.db import models

class User(models.Model):
    name = models.CharField(max_length=255)
    age = models.IntegerField()
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.name

# 使用Django ORM
# 创建用户
user = User.objects.create(name='Alice', age=25, email='alice@example.com')

# 查询用户
users = User.objects.all()
for user in users:
    print(user)

# 更新用户
user = User.objects.get(name='Alice')
user.age = 26
user.save()

# 删除用户
user = User.objects.get(name='Alice')
user.delete()

五、数据库连接池

5.1 使用连接池

对于高并发应用,使用连接池可以提高性能:

# 安装SQLAlchemy
# pip install SQLAlchemy

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import QueuePool

# 创建带有连接池的引擎
engine = create_engine(
    'mysql+pymysql://root:password@localhost/test',
    poolclass=QueuePool,
    pool_size=10,
    max_overflow=20,
    pool_pre_ping=True
)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 使用会话
# ...

# 关闭会话
session.close()

六、Python与Rust的对比

作为一个同时学习Python和Rust的转码者,我发现对比学习是一种很好的方法:

6.1 数据库交互对比

  • Python:有丰富的数据库驱动和ORM框架
  • Rust:有diesel、sqlx等ORM框架
  • 开发效率:Python开发效率高,Rust开发效率相对较低
  • 性能:Rust性能优异,Python性能相对较低

6.2 学习心得

  • Python的优势:开发效率高,生态丰富
  • Rust的优势:性能优异,内存安全
  • 相互借鉴:从Python学习快速开发,从Rust学习性能优化

七、实践项目推荐

7.1 数据库项目

  • 用户管理系统:实现用户的增删改查
  • 博客系统:实现文章的发布和管理
  • 电商系统:实现商品和订单的管理
  • 数据分析系统:实现数据的存储和分析

八、学习方法和技巧

8.1 学习方法

  • 循序渐进:先学习基础的数据库操作,再学习高级特性
  • 项目实践:通过实际项目来巩固知识
  • 文档阅读:仔细阅读数据库和ORM框架的官方文档
  • 社区交流:加入社区,向他人学习

8.2 常见问题和解决方法

  • 连接问题:检查数据库服务是否运行,连接参数是否正确
  • 性能问题:使用索引,优化SQL语句,使用连接池
  • 安全问题:使用参数化查询,避免SQL注入
  • 数据一致性:使用事务,确保数据的一致性

九、总结

Python与数据库的交互是编程中非常重要的一部分。作为一个非科班转码者,我深刻体会到学习数据库的重要性。

我的学习过程并不是一帆风顺的,遇到了很多困难和挫折,但通过不断地实践和学习,我逐渐掌握了Python与数据库交互的各种技巧。

保持学习,保持输出。虽然现在我还是个菜鸡,但我相信只要坚持,总有一天能成为真正的「第一程序员」!

一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL 一文带你了解三大开源关系型数据库:SQLite、MySQL和PostgreSQL。 阅读详情

相关推荐

SQLite、MySQL、PostgreSQL3个关系数据库之间的对比

数据库是对信息或数据进行逻辑建模的集群。另一方面,数据库管理系统(DBMS)是与数据库交互的计算机程序。DBMS允许你控制对数据库的访问、写入数据、执行查询以及执行与数据库管理相关的任何其他任务。虽然数据库管理系统通常被称为“数据库”,但这两个术语是不可互换的。数据库可以是任何数据集合,而不仅仅是存储在计算机上的数据。相比之下,DBMS特指允许您与数据库交互的软件。所有数据库管理系统都有一个底层模型,该模型对数据的存储和访问方式进行结构化。关系数据库管理系统是一种采用关系数据模型的DBMS。

码觉客的博客 1万+

Python 操作数据库:MySQL、PostgreSQL、SQLite 的最佳实践

``html。

2501_91142733的博客 669

某二级支行网络的设计与实现——配置脚本(1)

【代码】某二级支行网络的设计与实现——配置脚本(1)

u010311846的博客 577

mysql与sqlite数据库的区别

选择哪种数据库主要取决于具体的应用场景和需求。对于需要高性能、高并发和复杂功能的应用,MySQL 更合适;而对于轻量级、嵌入式应用,SQLite 更加合适。

wwwwhhhh_的博客 2924

求无向图中所有的环 C++ python

求无向图中所有的环

random_repick的专栏 1151

爬取中国空气质量在线监测分析平台

1.准备,爬取的链接地址 https://www.aqistudy.cn/html/city_detail.html 2.分析 a.当打开链接后,数据已经设置好了,说明里面大部分都是js通过ajax调用的, b.打开f12分析代码 通过捕获到的数据包,发现当前请求为ajax,携带着一个为d的参数且该请求携带的数据是加密过的,并且响应也是加密过的 c.这时候的问题就是...

Mr Right 6368

MySQL与SQLite区别

MySQL:支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种存储引擎都有不同的特性,如事务支持、索引类型、数据存储方式等。1. 企业级应用:MySQL因其强大的功能、性能和可扩展性,常用于企业级应用,包括电子商务、在线支付、社交网络等。2. 桌面和移动应用:SQLite可以嵌入到桌面和移动应用中,用于本地数据存储和查询。3. 开发和测试:由于其简单的安装和易于使用的特性,SQLite常用于开发和测试环境。- SQLite:支持外键约束,但它的实现与MySQL不同,并且不支持触发器。

qq_43517257的博客 3260

数学建模:相关性分析学习——皮尔逊(pearson)相关系数与斯皮尔曼(spearman)相关系数

相关性分析:求解相关系数并绘制热力图进行对比

weixin_67565775的博客 8万+

数据库操作与集成:使用Python与SQLite、MySQL、PostgreSQL等数据库

SQLite是一个轻量级的数据库引擎,它完全包含在单个磁盘文件中,不需要一个独立的服务器进程或操作系统级别的安装。SQLite因其简单性、可靠性和高性能,在小型应用和嵌入式系统中非常流行。Python内置了sqlite3模块,可以非常方便地与SQLite数据库进行交互。MySQL是一种关系型数据库管理系统,广泛应用于各种应用系统中。与SQLite不同,MySQL需要安装在服务器上,并可以通过网络进行访问。

这家伙很懒,什么都没有留下 2662

uniapp(全端兼容) - 最新详细uniapp全平台植入使用echarts图表插件,引入 Echarts 图表及使用详细教程,提供各种图表使用示例(拒绝复杂的过程,附带详细的使用示例保姆级教程)

uniapp 微信小程序 echats 图表,uni-app小程序引用echarts,niapp 微信小程序引入echats教程,uniapp 使用echats图表,uniapp开发如何在微信小程序平台使用echats图表,uniapp开发的小程序中怎么用echats,在uni-app中编译到微信小程序如何使用echarts,UNIAPP微信小程序使用Echarts,uni-app微信小程序使用echarts,Uniapp小程序端使用echarts最详细的教程,uni-app中使用Echarts绘画图表,u

✅ 精选推荐文章 1万+

java技术专家【面试】Java程序员英语面试整个流程

java技术专家【面试】Java程序员英语面试整个流程

大壮 751

Python 与 SQLite、MySQL 和 PostgreSQL 数据库的连接与管理

无论是轻量级的 SQLite,还是适合中大型项目的 MySQL 和 PostgreSQL,Python 都能提供便捷的操作方式。选择数据库时,应根据应用场景权衡性能、扩展性和复杂性。希望本文能帮助你掌握 Python 与这些数据库的集成和管理,为你的项目提供可靠的数据存储解决方案!

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 936

05 SAP CPI 访问第一个CPI接口

其中的clientid的值可作为Basic验证的用户名,clientsecret的值可作为Basic验证的密码。点击SEND按钮,可看见返回状态为200 OK。在04中,我们得到TOKEN令牌。POSTMAN向下滚动。点击按钮获取token。

SAP CPI 661

【Python数据库】Python连接3种数据库方法(SQLite\MySQL\PostgreSQL)

本文介绍了如何使用Python连接和操作三种主流数据库(SQLite、MySQL和PostgreSQL)。主要内容包括:1) 数据库基本架构解析;2) 使用Python库(sqlite3、mysql-connector、psycopg2)分别连接三种数据库的方法;3) 执行创建表、插入记录、查询记录、更新和删除记录等常见操作的代码示例。文章通过具体的代码演示,展示了针对不同数据库类型实现相同功能的差异,为Python开发者提供了实用的数据库操作指南。

weixin_42636075的博客 1346

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python-CS50多数据库支持:SQLite、MySQL、PostgreSQL配置教程

Python-CS50是CS50官方推出的Python库,提供了简洁高效的数据库操作接口,支持SQLite、MySQL和PostgreSQL等主流数据库。本文将详细介绍如何在Python项目中使用Python-CS50库快速配置和连接这三种数据库,帮助新手开发者轻松实现数据库操作。 ## 快速开始:安装Python-CS50库 要使用Python-CS50的数据库功能,首先需要安装该库。通过p

gitblog_00328的博客 767

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python 操作数据库:SQLite、MySQL、PostgreSQL 的优化技巧

无论选择哪种数据库,合理的优化策略都是必不可少的。通过合理使用索引、事务管理和高级特性,可以在不同的场景下获得最佳的性能表现。希望本文提供的技巧能帮助你在 Python 项目中更有效地操作数据库。```

2501_90730319的博客 471

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Prisma Client Python 多数据库支持对比:PostgreSQL、MySQL 和 SQLite 实战

Prisma Client Python 是一款自动生成且完全类型安全的数据库客户端,专为易用性设计。本文将深入对比其对 PostgreSQL、MySQL 和 SQLite 三大主流数据库的支持情况,帮助开发者根据项目需求选择最适合的数据库解决方案。 ## 📊 数据库支持概览 Prisma Client Python 官方文档明确支持以下数据库类型: - **PostgreSQL**:企业级

gitblog_00592的博客 914

Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点

优缺点」这个说法脱离场景是没有意义的。SQLite 的「不支持高并发写」在桌面笔记应用里根本不是缺点,因为那里就不存在并发写;PostgreSQL 的「功能丰富」在一个只存几十行配置表的小工具里也换不来任何收益。所以本文不做「谁更好」的排名,只讲三者在架构上有什么本质差别,以及这些差别在什么场景下会变成你的问题。「SQLite 是小号的 MySQL」。不对。它们不是「同一类东西的不同规模」,而是两种架构:SQLite 是嵌入式库,你的进程直接读写数据库文件;

kimnoic的专栏 59
上一篇: Python数据结构与算法:非科班转码者的学习指南
下一篇: Python深度学习实战:从理论到应用
第一程序员
博客等级 码龄1年 1万+粉丝 1792原创
评论 69
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值