Python数据库

简介: Python数据库

Python与数据库之间的交互通常通过数据库适配器(或a称为驱动)实现,这些适配器允许Python程序以一致的方式与各种数据库(如MySQL、SQLite、PostgreSQL等)进行交互。下面是一些基础的Python数据库操作,以SQLite为例,因为它是轻量级的,通常与Python一起分发。

1. 安装SQLite适配器

Python标准库已经包含了SQLite适配器,所以无需额外安装。

2. 连接到SQLite数据库

 

import sqlite3

 

 

 

# 连接到SQLite数据库

 

# 如果数据库不存在,那么它将被创建

 

# 如果数据库存在,那么将连接到该数据库

 

conn = sqlite3.connect('example.db')

 

 

 

# 创建一个Cursor对象,并执行SQL查询

 

cursor = conn.cursor()

3. 执行SQL查询

 

# 创建一个表

 

cursor.execute('''

 

CREATE TABLE IF NOT EXISTS users (

 

id INTEGER PRIMARY KEY,

 

name TEXT NOT NULL,

 

age INTEGER

 

)

 

''')

 

 

 

# 插入数据

 

cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25))

 

 

 

# 查询数据

 

cursor.execute('SELECT * FROM users')

 

rows = cursor.fetchall()

 

for row in rows:

 

print(row)

 

 

 

# 更新数据

 

cursor.execute("UPDATE users SET age = ? WHERE name = ?", (30, 'Alice'))

 

 

 

# 删除数据

 

cursor.execute("DELETE FROM users WHERE name = ?", ('Alice',))

4. 提交更改并关闭连接

 

# 提交(保存)更改

 

conn.commit()

 

 

 

# 关闭连接

 

conn.close()

5. 错误处理

当与数据库交互时,可能会遇到各种错误(如SQL语法错误、数据库连接问题等)。因此,使用try...except块来处理这些错误是很重要的。

 

try:

 

# ... 数据库操作 ...

 

except sqlite3.Error as e:

 

print("Database error:", e)

 

finally:

 

# 关闭连接

 

if conn:

 

conn.close()

6. 使用ORM(对象关系映射)

虽然直接使用SQL语句与数据库交互是可行的,但使用ORM(如SQLAlchemy)可以使代码更简洁、易读、易维护。

这只是一个简单的Python数据库操作入门。在实际应用中,你可能还需要处理更复杂的查询、索引、事务等。每个数据库都有其特定的语法和功能,因此最好查阅相关数据库的官方文档以获取更详细的信息。

在Python中连接数据库时,设置环境变量是一种常见做法,这样可以避免在代码中硬编码数据库连接信息,如用户名、密码、数据库名等。这样可以使代码更加安全、可移植,并且便于管理不同的环境(如开发环境、测试环境、生产环境)。

以下是如何在Python中设置和使用环境变量的步骤:

1. 设置环境变量

环境变量可以在操作系统级别设置,也可以在Python代码中设置。

在操作系统级别设置环境变量(以Linux和macOS为例):

1. 打开终端。

2. 使用export命令设置环境变量,例如:

bash

 

export DATABASE_URL="sqlite:///path/to/your/database.db"

或者,你可以将这条命令添加到~/.bashrc~/.bash_profile~/.zshrc(取决于你使用的shell)中,这样每次打开新的终端时,环境变量就会自动设置。

在Windows上设置环境变量:

1. 右键点击“此电脑”或“计算机”,选择“属性”。

2. 点击“高级系统设置”。

3. 在“系统属性”窗口中点击“环境变量”按钮。

4. 在“环境变量”窗口中,点击“新建”来添加新的环境变量。

在Python代码中设置环境变量:

虽然不推荐在代码中直接设置环境变量(因为这会使得环境信息依赖于特定的代码执行),但有时出于测试或演示目的,你可能需要这样做。

 

import os

 

 

 

os.environ['DATABASE_URL'] = 'sqlite:///path/to/your/database.db'

2. 在Python代码中使用环境变量

在Python代码中,你可以使用os.environ字典来访问环境变量。

 

import os

 

import sqlite3

 

 

 

# 从环境变量中获取数据库连接字符串

 

database_url = os.environ.get('DATABASE_URL')

 

 

 

# 解析连接字符串并连接到数据库

 

if database_url.startswith('sqlite://'):

 

# 对于SQLite,连接字符串通常是一个文件路径

 

conn = sqlite3.connect(database_url[len('sqlite://'):])

 

else:

 

# 对于其他数据库,你可能需要使用不同的库和连接方法

 

# 例如,对于PostgreSQL,你可能会使用psycopg2库

 

# 对于MySQL,你可能会使用mysql-connector-python库

 

# 这里只是一个示例,并不适用于其他数据库

 

conn = None 

 

 

 

# ... 执行数据库操作 ...

 

 

 

# 关闭连接

 

if conn:

 

conn.close()

3. 使用配置文件

除了环境变量,另一种常见的做法是使用配置文件(如.env文件或.ini文件)来存储数据库连接信息。你可以使用Python的configparser模块或第三方库(如python-dotenv)来读取这些配置文件。

例如,使用python-dotenv库:

首先,安装python-dotenv库:

bash

 

pip install python-dotenv

然后,创建一个.env文件,并在其中设置环境变量:

 

DATABASE_URL=sqlite:///path/to/your/database.db

最后,在Python代码中加载.env文件并使用环境变量:

 

from dotenv import load_dotenv

 

import os

 

 

 

# 加载.env文件

 

load_dotenv()

 

 

 

# 获取环境变量

 

database_url = os.environ.get('DATABASE_URL')

 

 

 

# 连接数据库

 

# ...

使用配置文件的好处是你可以将敏感信息(如密码)从代码中分离出来,使得代码更安全、更易于管理。

 

目录
相关文章
|
1月前
|
XML 关系型数据库 MySQL
python将word(doc或docx)的内容导入mysql数据库
用python先把doc文件转换成docx文件(这一步也可以不要后续会说明),然后读取docx的文件并另存为htm格式的文件(上一步可以直接把doc文件另存为htm),python根据bs4获取p标签里的内容,如果段落中有图片则保存图片。(图片在word文档中的位置可以很好的还原到生成的数据库内容) 我见网上有把docx压缩后解压获取图片的,然后根据在根据xml来读取图片的位置,我觉得比较繁琐。用docx模块读取段落的时候还需要是不是判断段落中有分页等,然而转成htm之后就不用判断那么多直接判断段落里的样式或者图片等就可以了。
27 1
|
1月前
|
SQL 关系型数据库 MySQL
Python怎么操作Mysql数据库
Python怎么操作Mysql数据库
51 0
|
3天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
13 0
|
4天前
|
SQL 关系型数据库 MySQL
第十三章 Python数据库编程
第十三章 Python数据库编程
|
4天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
9天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
133 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
9天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
29 6
|
15天前
|
SQL 关系型数据库 数据库
Python中SQLite数据库操作详解:利用sqlite3模块
【4月更文挑战第13天】在Python编程中,SQLite数据库是一个轻量级的关系型数据库管理系统,它包含在一个单一的文件内,不需要一个单独的服务器进程或操作系统级别的配置。由于其简单易用和高效性,SQLite经常作为应用程序的本地数据库解决方案。Python的内置sqlite3模块提供了与SQLite数据库交互的接口,使得在Python中操作SQLite数据库变得非常容易。
|
20天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
23 0
|
1月前
|
SQL Java 关系型数据库
在Python中编写Java数据库驱动是不可能的
在Python中编写Java数据库驱动是不可能的