Python-模块篇(数据库与邮件、sqlite3、PyMySQL、email、smtplib)
1、数据库-sqlite3(Python内置,无需安装)
SQLite是轻量级嵌入式数据库,适合单机应用、移动端或测试环境。
|
基本流程 import sqlite3 # 1. 连接数据库(文件不存在会自动创建) conn = sqlite3.connect('example.db') # 2. 创建游标对象(用于执行SQL) cursor = conn.cursor() # 3. 执行SQL语句(创建表) cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, email TEXT UNIQUE ) ''') # 4. 提交事务(增删改操作后必须提交) conn.commit() # 5. 关闭连接 conn.close() |
插入数据# 方式1:直接执行 cursor.execute("INSERT INTO users (name, age, email) VALUES ('张三', 25, 'zhangsan@example.com')") # 方式2:参数化查询(推荐,防SQL注入) cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('李四', 30, 'lisi@example.com')) # 方式3:批量插入 users = [('王五', 22, 'wangwu@ex.com'), ('赵六', 28, 'zhaoliu@ex.com')] cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users) conn.commit() |
|
更新与删除 # 更新 cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, '张三')) conn.commit() # 删除 cursor.execute("DELETE FROM users WHERE id = ?", (1,)) conn.commit()
|
查询数据 # 查询所有 cursor.execute("SELECT * FROM users") rows = cursor.fetchall() # 返回列表,每个元素是元组 for row in rows: print(row) # 查询一条 cursor.execute("SELECT * FROM users WHERE id = ?", (1,)) row = cursor.fetchone() # 返回单个元组或None # 查询多条(带条件) cursor.execute("SELECT * FROM users WHERE age > ?", (20,)) rows = cursor.fetchmany(5) # 获取前5条 |
2、数据库-PyMySQL(需安装:pip install pymysql)
PyMySQL是连接MySQL数据库的驱动,适合Web应用、服务端项目。
基本流程import pymysql # 1. 建立连接(需提供主机、用户、密码、数据库名) conn = pymysql.connect( host='localhost', # 或 '127.0.0.1' user='root', password='123456', database='test_db', charset='utf8mb4', autocommit=False # 默认关闭自动提交,需手动commit ) # 2. 创建游标(默认返回元组,如需字典格式需指定) cursor = conn.cursor() # 返回元组 # cursor = conn.cursor(pymysql.cursors.DictCursor) # 返回字典 # 3. 执行SQL cursor.execute("SELECT VERSION()") # 测试连接 version = cursor.fetchone() print(version) # 4. 关闭 cursor.close() conn.close() |
插入数据(参数化用 # 单条插入 sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)" cursor.execute(sql, ('张三', 25, 'zhangsan@ex.com')) conn.commit() # 必须提交 # 批量插入 data = [('李四', 30, 'lisi@ex.com'), ('王五', 22, 'wangwu@ex.com')] cursor.executemany(sql, data) conn.commit() |
|
更新与删除 cursor.execute("UPDATE users SET age = %s WHERE name = %s", (26, '张三')) conn.commit() cursor.execute("DELETE FROM users WHERE id = %s", (1,)) conn.commit() |
查询数据 cursor.execute("SELECT * FROM users WHERE age > %s", (20,)) rows = cursor.fetchall() #获取所有记录 rows = cursor.fetchone() #获取1条记录 for row in rows: print(row) # 如果使用DictCursor,则通过列名访问 # print(row['name'], row['age']) |
3、数据库-ORM介绍
ORM框架(Python的SQLAlchemy):Object-Relational Mapping、对象关系映射
定义:将对象和关系数据库进行相互映射(解决对象和关系型数据库之间的数据交互问题)。
| 数据库 | 程序 |
| 表 | 映射为类 |
| 表中的记录(一行) | 映射为对象 |
| 表中的字段(一列) | 映射为对象的属性 |
作用:配置好映射关系后,ORM可以自动生成SQL语句,自动将对象中的数据存储到数据库,也可以将数据库中的数据提取到对象中。
4、邮件-email(构造邮件)
|
文本邮件 from email.mime.text import MIMEText from email.header import Header # ========== 1. 配置发件信息 ========== sender_email = 'your_email@qq.com' receiver_email = 'receiver@example.com' # ========== 2. 构建邮件内容 ========== subject = 'Python邮件测试' #邮件主题 content = '这是一封来自Python的测试邮件。' #字符串内容 # 构建MIMEText对象:内容、文本类型、编码 msg = MIMEText(content, 'plain', 'utf-8') #构造邮件内容、纯文本 msg['From'] = Header(sender_email) # 发件人 msg['To'] = Header(receiver_email) # 收件人 msg['Subject'] = Header(subject, 'utf-8') # 主题 html_content = ''' <h2>Python邮件测试</h2> <p>这是一封 <b>HTML</b> 格式的邮件,支持<font color="red">彩色文字</font>和<a href="https://www.python.org">链接</a>。</p> ''' msg = MIMEText(html_content, 'html', 'utf-8') #构造邮件内容、html文本 |
|
附件邮件(图片、PDF、Excel等) from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from email.header import Header # ========== 1. 创建邮件容器 ========== msg = MIMEMultipart() #使用 MIMEMultipart 作为容器,然后把正文和各附件分别添加进去 msg['From'] = Header(sender_email) msg['To'] = Header(receiver_email) msg['Subject'] = Header('带附件的邮件', 'utf-8') # ========== 2. 添加正文 ========== body = MIMEText('请查收附件中的报告。', 'plain', 'utf-8') msg.attach(body) #添加内容到邮件 # ========== 3. 添加附件 ========== file_path = 'report.pdf' # 附件路径 with open(file_path, 'rb') as f: # MIMEBase表示未知类型的附件,用'application/octet-stream' part = MIMEBase('application', 'octet-stream') part.set_payload(f.read()) # 编码为Base64 encoders.encode_base64(part) # 设置附件头,指定文件名 part.add_header( 'Content-Disposition', f'attachment; filename={Header("报告.pdf", "utf-8").encode()}' ) msg.attach(part) #添加内容到邮件 #只适合附件文件名固定是英文或数字,遇到中文容易乱码 msg["Content-Disposition"] = 'attachment; filename="report.pdf"' |
5、邮件-smtplib(发送邮件)
# ==========发送邮件 ========== import smtplib # ========== 1. 配置发件信息 ========== smtp_server = 'smtp.qq.com' # SMTP服务器地址(以QQ邮箱为例) smtp_port = 465 # SSL端口(明文传输是25端口,程序可能阻止) sender_email = 'your_email@qq.com' sender_password = 'xxxxxxxxxxxx' # 邮箱授权码(不是登录密码!) receiver_email = 'receiver@example.com' try: # 使用SSL加密连接(适合465端口) server = smtplib.SMTP_SSL(smtp_server, smtp_port) # 登录 server.login(sender_email, sender_password) # 发送:发件人,收件人(可以是列表),邮件内容(需要转为字符串) server.sendmail(sender_email, [receiver_email], msg.as_string()) print("邮件发送成功!") except Exception as e: print(f"发送失败:{e}") finally: server.quit()
本文来自博客园,作者:FengweiTech,转载请注明原文链接:https://www.cnblogs.com/fengwei-blogs/p/21828393

浙公网安备 33010602011771号