Python数据库编程指南:连接与操作SQLite与MySQL

news2025/1/2 0:12:02

目录

一、引言

二、SQLite数据库连接与操作

(一)安装SQLite库

(二)建立数据库连接

(三)执行SQL语句

(四)注意事项

三、MySQL数据库连接与操作

(一)安装MySQL库

(二)建立数据库连接

(三)执行SQL语句

(四)注意事项

四、高级操作与性能优化

(一)事务管理

(二)批量插入

(三)索引与查询优化

(四)连接池

五、总结


一、引言

在Python编程中,数据库操作是一个常见的任务。无论是处理大量数据、构建Web应用还是进行数据分析,数据库都是不可或缺的工具。SQLite和MySQL是两种广泛使用的数据库系统,SQLite以其轻量级、无需配置和零管理的特点而著称,而MySQL则是一个功能强大的关系型数据库管理系统。本文将详细介绍如何在Python中连接和操作这两种数据库。

二、SQLite数据库连接与操作

(一)安装SQLite库

Python标准库中自带了sqlite3模块,因此无需额外安装。

(二)建立数据库连接

使用sqlite3.connect()方法可以建立与SQLite数据库的连接。如果数据库文件不存在,SQLite会自动创建它。

import sqlite3  
  
# 连接到SQLite数据库  
# 数据库文件是test.db  
# 如果文件不存在,会自动在当前目录创建  
conn = sqlite3.connect('test.db')  
  
# 创建一个Cursor对象  
cursor = conn.cursor()

(三)执行SQL语句

使用Cursor对象的execute()方法可以执行SQL语句。

# 创建一个表  
cursor.execute('''  
    CREATE TABLE IF NOT EXISTS users (  
        id INTEGER PRIMARY KEY,  
        name TEXT,  
        age INTEGER  
    )  
''')  
  
# 插入数据  
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 30))  
  
# 提交事务  
conn.commit()  
  
# 查询数据  
cursor.execute("SELECT * FROM users")  
rows = cursor.fetchall()  
for row in rows:  
    print(row)  
  
# 关闭连接  
conn.close()

(四)注意事项

在插入、更新或删除数据后,需要调用commit()方法提交事务。
使用参数化查询(如上面的?占位符)可以防止SQL注入攻击。

三、MySQL数据库连接与操作

(一)安装MySQL库

Python连接MySQL数据库需要使用第三方库,如mysql-connector-python或PyMySQL。这里以mysql-connector-python为例进行介绍。

pip install mysql-connector-python

(二)建立数据库连接

使用mysql.connector.connect()方法建立与MySQL数据库的连接。

import mysql.connector  
  
# 创建数据库连接  
cnx = mysql.connector.connect(user='yourusername', password='yourpassword',  
                              host='127.0.0.1',  
                              database='yourdatabase')  
  
# 创建一个Cursor对象  
cursor = cnx.cursor()

(三)执行SQL语句

与SQLite类似,使用Cursor对象的execute()方法执行SQL语句。

# 创建一个表  
cursor.execute('''  
    CREATE TABLE IF NOT EXISTS users (  
        id INT AUTO_INCREMENT PRIMARY KEY,  
        name VARCHAR(255),  
        age INT  
    )  
''')  
  
# 插入数据  
insert_stmt = (  
    "INSERT INTO users (name, age) "  
    "VALUES (%s, %s)"  
)  
data = ('Bob', 25)  
cursor.execute(insert_stmt, data)  
  
# 提交事务  
cnx.commit()  
  
# 查询数据  
cursor.execute("SELECT * FROM users")  
rows = cursor.fetchall()  
for row in rows:  
    print(row)  
  
# 关闭连接  
cursor.close()  
cnx.close()

(四)注意事项

  • 在使用mysql-connector-python时,SQL语句中的占位符是%s。
  • 与SQLite一样,在插入、更新或删除数据后需要调用commit()方法提交事务。
  • 使用参数化查询可以防止SQL注入攻击。

四、高级操作与性能优化

(一)事务管理

在数据库操作中,事务是一组SQL语句的集合,这些语句要么全部执行成功,要么全部不执行。Python的数据库连接对象通常提供了事务管理的方法。

(二)批量插入

当需要插入大量数据时,使用批量插入可以显著提高性能。不同的数据库和连接库可能有不同的实现方式。

(三)索引与查询优化

为数据库表建立合适的索引可以加快查询速度。同时,优化SQL查询语句也是提高性能的重要手段。

(四)连接池

在高并发的Web应用中,频繁地建立和关闭数据库连接会消耗大量资源。使用连接池可以复用连接对象,提高性能。

五、总结

在Python中连接和操作SQLite与MySQL数据库是一项基础且重要的技能。通过本文的介绍,我们了解了如何建立与这两种数据库的连接,如何执行SQL语句进行数据的增删改查,以及在进行数据库操作时需要注意的一些事项。

SQLite以其轻量级和易于使用的特点,适用于小型项目或快速原型开发。而MySQL则因其强大的功能和可扩展性,在大型应用和企业级项目中有着广泛的应用。

在数据库编程中,除了基本的增删改查操作外,还需要注意事务管理、批量插入、索引与查询优化等高级话题。这些技术可以帮助我们提高数据库操作的效率和性能。

此外,随着Web应用的不断发展,连接池技术也越来越受到重视。通过复用数据库连接对象,连接池技术可以显著减少资源消耗,提高系统的并发性能。

最后,需要强调的是,数据库编程是一个需要不断学习和实践的过程。在实际应用中,我们可能会遇到各种各样的问题和挑战。只有不断地学习和积累经验,才能更好地掌握数据库编程的技能,并应用到实际项目中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Dapper 创建 Blazor Server SPA

介绍 Blazor 是 Microsoft 构建的一个新框架,用于使用 .NET 代码库创建交互式客户端 Web UI。 Dapper 是一个微型 ORM(对象关系映射器),可帮助将本机查询输出映射到领域类。它是由 StackOverflow 团队构建并作为开源发布的高性能…

编写工具调用windeployqt+ldd为msys2 Qt应用程序生成完整发布包

文章目录 概要整体架构流程技术名词解释技术细节1. 界面设计2. 递归枚举文件3. 运行windeployqt4. 运行ldd并拷贝文件5. 驱动流程 小结完整工程链接 概要 在windows下,动态链接库一直是发布Qt程序最为头痛的问题。在msys2环境下,尤其如此。msys2的winde…

ArcGIS Pro SDK (三)Addin控件 3 事件功能类

22 ArcGIS Pro 放置处理程序 22.1 添加控件 22.2 Code 放置处理程序可以实现文件拖动放置、TreeVIew、ListBox等控件拖动放置功能&#xff0c;此处新建一个停靠窗并添加一个TreeVIew&#xff0c;实现节点拖动事件&#xff1b; TestDropHandlerDockpane.xaml <UserContro…

开源项目推荐

这个资源列表集合了.NET开发领域的优秀工具、库、框架和软件等&#xff0c; 如果您目前研究开源大模型项目&#xff0c;请参考热门开源大模型项目推荐链接如下&#xff1a;https://blog.csdn.net/hefeng_aspnet/article/details/139669116 欢迎各位小伙伴收藏、点赞、留言、评论…

一文学会消息中间件的基础知识

什么是消息队列 队列数据结构 我们都学习过数据结构与算法相关的内容,消息队列从数据结构来看,就是一个由链表或是数组构成的一个先进先出的数据容器。由链表实现还是数组实现都没关系,它只要满足数据项是先进先出的特点,那么就可以认为它是一个队列结构。队列是只允许在…

个人云服务器已经被安全合规等卡脖子 建议不要买 买了必定后悔 安全是个大问题 没有能力维护

我的想法 自己买一个云服务器&#xff0c;先自己边做边学习&#xff0c;向往硅谷精神&#xff0c;财富与自由。如果能赚钱&#xff0c;就开个公司。这次到期就放弃了。 我前前后后6年花6000多元买云服务器。业余花了无数的精力&#xff0c;从2018到现在 &#xff0c;也没有折…

618购物节数码好物到底怎么选?盘点几款可闭眼入的数码好物分享

随着618购物节的热烈氛围逐渐升温&#xff0c;数码产品的选购成为了许多消费者关注的焦点。面对市场上层出不穷的新品和优惠&#xff0c;如何选择一款既符合自己需求又物超所值的数码好物&#xff0c;成为了不少人的难题&#xff0c;今天&#xff0c;我们就为大家带来几款精心挑…

QT Redis 中的实现发布/订阅功能(全网最全的教程)

Redis 介绍 Redis发布/ 订阅系统 是 Web 系统中比较常用的一个功能。简单点说就是 发布者发布消息&#xff0c;订阅者接收消息&#xff0c;这有点类似于我们的报纸/ 杂志社之类的 实现代码 #ifndef MAINWIDGET_H #define MAINWIDGET_H#include <QWidget> #include <…

【C++提高编程-09】----C++ STL之常用排序算法

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

基于单片机的无线遥控自动翻书机械臂设计

摘 要&#xff1a; 本设备的重点控制部件为单片机&#xff0c;充分实现了其自动化的目的。相关研究表明&#xff0c;它操作简单便捷&#xff0c;使残疾人在翻书时提供了较大的便利&#xff0c;使用价值性极高&#xff0c;具有很大的发展空间。 关键词&#xff1a; 机械臂&…

Django后台忘记管理员的账号

使用命令启动项目&#xff1a; python manage.py runserver输入后缀/admin&#xff0c;进入后台管理员&#xff0c;如果此时忘记你先前设置的用户名与密码怎么办&#xff1f; 终端输入&#xff1a; python manage.py shell 输入以下内容&#xff0c;并查看返回结果&#xff…

大跨度气膜综合馆有哪些优势—轻空间

1. 经济高效 材料和施工成本低 气膜综合馆的建设成本相对较低&#xff0c;主要材料为膜材和充气系统&#xff0c;不需要大量的钢筋混凝土和复杂的结构施工&#xff0c;降低了材料和施工成本。 能源消耗低 气膜馆的双层膜结构和充气系统具有良好的保温性能&#xff0c;减少了冬…

【经典爬虫案例】用Python爬取微博热搜榜!

一、爬取目标 本次爬取的是: 微博热搜榜 &#xff08;代码也可直接在下方拿&#xff09;&#xff1a; ​ 分别爬取每条热搜的&#xff1a; 热搜标题、热搜排名、热搜类别、热度、链接地址。 下面&#xff0c;对页面进行分析。 经过分析&#xff0c;此页面没有XHR链接通过&am…

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(自定义BeanPostProcessor)

序言 之前文章有介绍采用FactoryBean的方式创建对象&#xff0c;以及使用反射创建对象。 这篇文章继续介绍Spring中创建Bean的形式之一——自定义BeanPostProcessor。 之前在介绍BeanPostProcessor的文章中有提到&#xff0c;BeanPostProcessor接口的实现中有一个Instantiatio…

Proxmox VE 超融合集群扩容后又平稳运行了170多天--不重启的话,488天了

五个节点的Proxmox VE 超融合集群&#xff0c;扩从了存储容量&#xff0c;全NVMe高速盘&#xff0c;单机4条3.7TB容量&#xff08;扩容前是两块NVMe加两块16TB的慢速SATA机械盘&#xff0c;拔掉机械盘&#xff0c;替换成两块NVMe&#xff09;&#xff0c;速度那叫一个快啊。 当…

秋招突击——6/16——复习{(单调队列优化DP)——最大子序和,背包模型——宠物小精灵收服问题}——新作{二叉树的后序遍历}

文章目录 引言复习&#xff08;单调队列优化DP&#xff09;——最大子序和单调队列的基本实现思路——求可移动窗口中的最值总结 背包模型——宠物小精灵收服问题思路分析参考思路分析 新作二叉树的后续遍历加指针调换 总结 引言 复习 &#xff08;单调队列优化DP&#xff09…

Qt实现单例模式:Q_GLOBAL_STATIC和Q_GLOBAL_STATIC_WITH_ARGS

目录 1.引言 2.了解Q_GLOBAL_STATIC 3.了解Q_GLOBAL_STATIC_WITH_ARGS 4.实现原理 4.1.对象的创建 4.2.QGlobalStatic 4.3.宏定义实现 4.4.注意事项 5.总结 1.引言 设计模式之单例模式-CSDN博客 所谓的全局静态对象&#xff0c;大多是在单例类中所见&#xff0c;在之前…

使用ant-design/cssinjs向plasmo浏览器插件的内容脚本content中注入antd的ui组件样式

之前写过一篇文章用来向content内容脚本注入antd的ui&#xff1a;https://xiaoshen.blog.csdn.net/article/details/136418199&#xff0c;但是方法就是比较繁琐&#xff0c;需要将antd的样式拷贝出来&#xff0c;然后贴到一个单独的css样式文件中&#xff0c;然后引入到内容脚…

20个超实用的VS Code扩展(2024年版)

大家好&#xff0c;今天小程给大家带来一篇关于 VS Code 扩展的文章。VS Code 这几年做得是风生水起&#xff0c;可以算得上是微软的良心产品&#xff0c;其最大的优势就是拥有众多高质量的扩展。在本文中&#xff0c;将向大家推荐一些我认为在 2024 年对开发者来说又实用又好用…