如何用Python连接数据库?SQLite和MySQL操作指南!
本篇文章给大家分享《如何用Python连接数据库?SQLite和MySQL操作指南!》,覆盖了文章的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
Python连接数据库可通过特定库实现,SQLite适合小型应用,MySQL适用于中大型应用。1.使用sqlite3模块可连接SQLite数据库,通过connect()方法创建连接,cursor()创建游标执行SQL语句;2.创建表时用CREATE TABLE IF NOT EXISTS确保表不存在时才创建,主键设定与字段非空约束需明确;3.插入数据使用?占位符防止SQL注入,并调用commit()提交事务;4.查询数据通过SELECT语句配合fetchall()获取结果;5.MySQL连接需安装mysql-connector-python,使用connect()并传入host、user、password、database参数;6.处理连接错误可用try...except块捕获异常,并根据错误码做针对性处理;7.ORM框架如SQLAlchemy可简化操作,通过定义类映射表结构,使用session管理增删改查;8.连接池管理提升性能,MySQL支持内置连接池,SQLite可通过自定义或第三方库实现;9.防止SQL注入应使用参数化查询、输入验证、最小权限原则及定期安全审计。
连接数据库,简单来说就是用Python代码和数据库建立起“对话”的桥梁,这样你才能用代码去读取、写入、修改数据库里的数据。

掌握Python连接数据库的方法,无论是SQLite还是MySQL,对于数据处理至关重要。下面将介绍如何操作。

SQLite数据库连接与操作
SQLite是轻量级的嵌入式数据库,无需单独安装服务器,非常适合小型应用和学习。
连接SQLite数据库

import sqlite3 # 连接到数据库 (如果数据库不存在,则会自动创建) conn = sqlite3.connect('mydatabase.db') # 创建一个cursor对象,用于执行SQL语句 cursor = conn.cursor()
这里,sqlite3.connect('mydatabase.db')
创建了一个到名为 mydatabase.db
的SQLite数据库的连接。如果该文件不存在,Python 会自动创建一个。cursor = conn.cursor()
创建了一个游标对象,你可以通过这个游标来执行SQL命令。
创建表
cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER ) ''')
cursor.execute()
用于执行SQL语句。这段代码创建了一个名为 users
的表,包含 id
、name
和 age
三个字段。INTEGER PRIMARY KEY
表示 id
是主键,TEXT NOT NULL
表示 name
字段不能为空。IF NOT EXISTS
确保只有当表不存在时才创建。
插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30)) cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 25)) conn.commit() # 提交事务,保存更改
这段代码插入了两条数据到 users
表中。?
是占位符,用于安全地传递参数,防止SQL注入。conn.commit()
用于提交事务,将更改保存到数据库。如果不提交,数据不会真正写入。
查询数据
cursor.execute("SELECT * FROM users") rows = cursor.fetchall() for row in rows: print(row)
这段代码查询了 users
表中的所有数据,并通过循环打印每一行。cursor.fetchall()
获取所有查询结果,返回一个列表,其中每个元素都是一个元组,代表一行数据。
关闭连接
conn.close()
操作完成后,务必关闭数据库连接,释放资源。
MySQL数据库连接与操作
MySQL是流行的关系型数据库,适用于中大型应用。
安装MySQL Connector/Python
首先,需要安装MySQL Connector/Python,可以使用pip:
pip install mysql-connector-python
连接MySQL数据库
import mysql.connector mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) mycursor = mydb.cursor()
你需要替换 yourusername
、yourpassword
和 yourdatabase
为你的MySQL用户名、密码和数据库名。mysql.connector.connect()
创建了一个到MySQL数据库的连接。
创建表
mycursor.execute("CREATE TABLE IF NOT EXISTS customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))")
与SQLite类似,这段代码创建了一个名为 customers
的表。AUTO_INCREMENT
使 id
字段自动递增。
插入数据
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)" val = ("John", "Highway 21") mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "record inserted.")
这段代码插入了一条数据到 customers
表中。%s
是占位符,用于安全地传递参数。mycursor.rowcount
返回受影响的行数。
查询数据
mycursor.execute("SELECT * FROM customers") myresult = mycursor.fetchall() for x in myresult: print(x)
这段代码查询了 customers
表中的所有数据,并通过循环打印每一行。
关闭连接
mydb.close()
同样,操作完成后,务必关闭数据库连接。
如何处理数据库连接错误?
数据库连接过程中可能会遇到各种错误,例如用户名密码错误、数据库服务器未启动等。处理这些错误至关重要,以确保程序的健壮性。
使用try...except块
可以使用 try...except
块来捕获并处理数据库连接错误。
import sqlite3 try: conn = sqlite3.connect('mydatabase.db') cursor = conn.cursor() # 其他数据库操作... conn.close() except sqlite3.Error as e: print(f"数据库连接错误: {e}")
这段代码尝试连接到SQLite数据库,如果发生任何 sqlite3.Error
异常,程序会捕获该异常并打印错误信息,而不会崩溃。
针对不同错误类型进行处理
可以根据不同的错误类型进行不同的处理。例如,可以检查数据库文件是否存在,或者检查MySQL服务器是否正在运行。
import mysql.connector try: mydb = mysql.connector.connect( host="localhost", user="yourusername", password="yourpassword", database="yourdatabase" ) mycursor = mydb.cursor() # 其他数据库操作... mydb.close() except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print("用户名或密码错误") elif err.errno == errorcode.ER_BAD_DB_ERROR: print("数据库不存在") else: print(err)
这段代码针对MySQL连接错误进行了更细致的处理。如果用户名或密码错误,或者数据库不存在,程序会打印相应的错误信息。
如何使用ORM(对象关系映射)简化数据库操作?
ORM(Object-Relational Mapping)是一种编程技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说,ORM可以将数据库中的表映射为Python中的类,将表中的行映射为类的实例,从而可以使用面向对象的方式操作数据库。
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 Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(255)) age = Column(Integer) def __repr__(self): return f"<User(name='{self.name}', age='{self.age}')>"
这段代码定义了一个 User
类,它映射到数据库中的 users
表。id
、name
和 age
分别映射到表中的字段。
创建数据库和表
engine = create_engine('sqlite:///mydatabase.db') Base.metadata.create_all(engine)
这段代码创建了一个SQLite数据库,并根据模型创建了相应的表。
创建会话
Session = sessionmaker(bind=engine) session = Session()
会话用于管理数据库操作。
插入数据
new_user = User(name='Charlie', age=35) session.add(new_user) session.commit()
这段代码创建了一个 User
类的实例,并将其添加到数据库中。
查询数据
users = session.query(User).all() for user in users: print(user)
这段代码查询了 users
表中的所有数据,并通过循环打印每个用户的信息。
关闭会话
session.close()
操作完成后,务必关闭会话。
如何进行数据库连接池管理?
数据库连接池是一种管理数据库连接的技术,它可以预先创建一组数据库连接,并将这些连接保存在一个“池”中。当应用程序需要访问数据库时,它可以从连接池中获取一个连接,使用完毕后将连接返回到池中,而不是每次都创建新的连接。这样可以显著提高数据库访问的性能,并减少资源消耗。
使用sqlite3.Pool
(适用于SQLite)
虽然sqlite3
模块本身没有内置连接池,但可以使用第三方库或自定义实现。
# 一个简单的SQLite连接池示例 (非线程安全) import sqlite3 class SQLiteConnectionPool: def __init__(self, db_path, max_connections=5): self.db_path = db_path self.max_connections = max_connections self.pool = [] self.lock = threading.Lock() # 用于线程安全 def get_connection(self): with self.lock: if self.pool: return self.pool.pop() if len(self.pool) < self.max_connections: return sqlite3.connect(self.db_path) else: raise Exception("连接池已满") def release_connection(self, conn): with self.lock: if len(self.pool) < self.max_connections: self.pool.append(conn) else: conn.close() # 关闭多余的连接
使用mysql.connector.pooling
(适用于MySQL)
MySQL Connector/Python 提供了连接池模块。
import mysql.connector from mysql.connector import pooling # 创建连接池 dbconfig = { "host": "localhost", "user": "yourusername", "password": "yourpassword", "database": "yourdatabase" } pool = pooling.MySQLConnectionPool(pool_name = "mypool", pool_size = 5, pool_reset_session = True, **dbconfig) # 从连接池获取连接 conn = pool.get_connection() cursor = conn.cursor() # 执行数据库操作... cursor.execute("SELECT * FROM customers") myresult = cursor.fetchall() for x in myresult: print(x) # 释放连接 cursor.close() conn.close()
pooling.MySQLConnectionPool()
创建了一个连接池,pool_size
指定了连接池的大小。pool.get_connection()
从连接池获取一个连接。使用完毕后,调用 conn.close()
将连接返回到连接池。
如何防止SQL注入攻击?
SQL注入是一种常见的网络安全漏洞,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,从而绕过应用程序的安全检查,直接访问或修改数据库中的数据。
使用参数化查询或预编译语句
参数化查询或预编译语句是防止SQL注入有效的手段。它们将SQL语句和参数分开处理,确保用户输入的数据不会被解释为SQL代码。
# SQLite cursor.execute("SELECT * FROM users WHERE name = ? AND age = ?", (username, age)) # MySQL sql = "SELECT * FROM customers WHERE name = %s AND address = %s" val = (username, address) mycursor.execute(sql, val)
在这两种情况下,?
和 %s
都是占位符,用于安全地传递参数。数据库驱动程序会自动对参数进行转义,防止SQL注入。
输入验证和过滤
对用户输入的数据进行验证和过滤,可以有效防止恶意SQL代码的注入。
- 限制输入长度: 限制输入字段的长度,防止过长的SQL代码注入。
- 验证数据类型: 验证输入的数据类型是否符合预期,例如,如果期望输入的是整数,则拒绝非整数的输入。
- 过滤特殊字符: 过滤掉可能导致SQL注入的特殊字符,例如单引号、双引号、分号等。
最小权限原则
为数据库用户分配最小的权限,可以降低SQL注入攻击的风险。例如,只授予用户查询数据的权限,而禁止用户修改或删除数据。
使用ORM框架
ORM框架通常会自动处理SQL注入的问题,因为它们使用参数化查询或预编译语句来操作数据库。
定期安全审计
定期对应用程序进行安全审计,可以及时发现并修复SQL注入漏洞。
理论要掌握,实操不能落!以上关于《如何用Python连接数据库?SQLite和MySQL操作指南!》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

- 上一篇
- Win10无法添加网络打印机怎么办?打印机搜索失败的解决

- 下一篇
- html中css怎么引入外部样式 css外部链接方法
-
- 文章 · python教程 | 3小时前 |
- python中怎么安装pip python包管理工具安装指南
- 458浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Python中如何实现观察者模式?观察者模式如何解耦?
- 476浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- 正则表达式中的回溯是什么?如何避免?
- 457浏览 收藏
-
- 文章 · python教程 | 3小时前 | Python 协同过滤
- 如何用Python实现简单的推荐系统?协同过滤基础实现
- 350浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- python中fd是什么意思 python文件描述符简写说明
- 359浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Python连接MySQL数据库的方法
- 203浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- python中sort用法 python列表排序函数教学
- 441浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python高性能计算 Python代码加速优化技巧大全
- 430浏览 收藏
-
- 文章 · python教程 | 4小时前 | Python 机器学习
- 如何用Python实现简单的机器学习?Scikit-learn入门!
- 404浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- ord在python中是什么意思 python字符转码函数解析
- 181浏览 收藏
-
- 文章 · python教程 | 5小时前 |
- 学python能干嘛 学习后就业方向
- 131浏览 收藏
-
- 文章 · python教程 | 5小时前 |
- Python正则如何匹配文件路径?不同系统适配
- 452浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 免费AI认证证书
- 科大讯飞AI大学堂推出免费大模型工程师认证,助力您掌握AI技能,提升职场竞争力。体系化学习,实战项目,权威认证,助您成为企业级大模型应用人才。
- 18次使用
-
- 茅茅虫AIGC检测
- 茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
- 160次使用
-
- 赛林匹克平台(Challympics)
- 探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
- 196次使用
-
- 笔格AIPPT
- SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
- 177次使用
-
- 稿定PPT
- 告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
- 167次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览