Python__模块(DATA-管理)__MySQL / DBM

文章详细介绍了如何使用Python的PyMySQL库进行MySQL数据库的安装、连接,以及创建表、插入数据、查询数据和删除数据的基本操作,同时展示了DBM模块的简单用法。

MySQL(安装)

pip install PyMySQL


MySQL(参考代码)

创建表

import pymysql.cursors
# 连接MySQL数据库
connection = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123456",
    db="新数据库",
    charset="utf8mb4",
    cursorclass=pymysql.cursors.DictCursor,
)
# 通过cursor创建游标
cursor = connection.cursor()
# 创建sql 语句,并执行
sql = "CREATE TABLE `users` (\
       \
        `id` INT(11) NOT NULL AUTO_INCREMENT,\
        `email` VARCHAR(255) COLLATE utf8_bin NOT NULL,\
        `password` VARCHAR(255) COLLATE utf8_bin NOT NULL,\
         PRIMARY KEY (`id`)\
      \
       ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin\
         AUTO_INCREMENT=1 ;"
cursor.execute(sql)
# 提交SQL
connection.commit()

连接数据库

import pymysql.cursors
# 连接MySQL数据库
connection = pymysql.connect(host='127.0.0.1',
                             port=3306,
                             user='root',
                             password='123456',
                             db='新数据库',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
# 通过cursor创建游标
cursor = connection.cursor()
# 创建sql 语句,并执行
sql = "INSERT INTO users (email, password) VALUES ('123@.info', '000000')"
cursor.execute(sql)
# 提交SQL
connection.commit()

数据查询

import pymysql.cursors
# 连接MySQL数据库
connection = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123456",
    db="新数据库",
    charset="utf8mb4",
    cursorclass=pymysql.cursors.DictCursor,
)
# 通过cursor创建游标
cursor = connection.cursor()
# 执行数据查询
sql = "SELECT `id`, `password` FROM `users` WHERE `email`='huzhiheng@itest.info'"
cursor.execute(sql)
# 查询数据库单条数据
result = cursor.fetchone()
print(result)
print("-----------------------")
# 执行数据查询
sql = "SELECT `id`, `password` FROM `users`"
cursor.execute(sql)
# 查询数据库多条数据
result = cursor.fetchall()
for data in result:
    print(data)
# 关闭数据连接
connection.close()

数据获取

import pymysql
# 连接数据库
con = pymysql.connect(
    host="localhost", 
    user="root", 
    password="123456", 
    database="新数据库", 
    charset="utf8"
)
# 创建游标
cur = con.cursor()
# 生成数据库
sql = "select * from users"
# 获取结果
cur.execute(sql)

# 获取所有记录  fetchall--获取所有记录
# fetchmany--获取多条记录,需传参  fetchone--获取一条记录

all = cur.fetchall()
# 输出查询结果
print(all)
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
cur.close()

数据插入

import pymysql
# 连接数据库
con = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    user="root",
    password="123456",
    database="新数据库",
    charset="utf8mb4",
)
# 创建游标
cur = con.cursor()
# SQL插入语句
sql = "INSERT INTO users (email, password) VALUES ('test.info', '000000')"
# 获取结果
cur.execute(sql)
# 提交SQL
con.commit()
# 关闭游标
cur.close()

数据删除

import pymysql
# 连接数据库
con = pymysql.connect(
    host="localhost", 
    user="root", 
    password="123456", 
    database="新数据库", 
    charset="utf8"
)
# 创建游标
cur = con.cursor()
# SQL 删除语句
sql = "DELETE from users WHERE id = 5 "
cur.execute(sql)
con.commit()
# 关闭游标
cur.close()
# 关闭数据库连接,目的为了释放内存
cur.close()

DBM(参考代码)

综合例子

# @参数列表 /
# r     只读
# w     写
# n     总是创建一个数据
# c     存在不创建,不存在则创建
# ---------------------------- / 

import dbm
# 创建数据库
with dbm.open("./demo.db", "c") as db:
    db["x"] = "{" + "{0}".format(1) + "}"
    db["key"] = "k"
    db["today"] = "t"
    db["author"] = "a"

# 读取->输出:键值/键名
"""
with dbm.open("demo.db", "r") as db:
    print("获取所有键:", db.keys())
    print(db["author"])
    for k in db.keys():
        print(k, db[k].decode("utf-8"))
"""
# 写入->修改键值
"""
with dbm.open("demo.db", "w") as db:
    try:
        with dbm.open("demo.db", "r") as db:
            print("获取所有键:", db.keys())
            print(db["author"])

            for k in db.keys():
                print(k, db[k].decode("utf-8"))
                db["autho"] = "new"
    except TypeError as err:
        print(err)
"""

任务1:通信基站信息管理系统(Python+SQLite)‌ ‌要求‌:创建SQLite数据库存储基站信息(基站ID、位置、覆盖半径、状态),用Python实现增删改查功能。 ‌步骤‌: 1. 创建数据库表: python import sqlite3 conn = sqlite3.connect('base_station.db') cursor = conn.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS stations (id TEXT PRIMARY KEY, location TEXT, radius REAL, status TEXT)''') conn.commit() 2. 实现插入功能: python def add_station(id, loc, radius, status): cursor.execute("INSERT INTO stations VALUES (?,?,?,?)", (id, loc, radius, status)) conn.commit() ‌解释‌:通过Python的sqlite3模块实现轻量级数据库操作,适合通信设备管理场景。 ‌任务2:通信信号强度数据分析(Python+Pandas)‌ ‌要求‌:用Pandas读取CSV格式的信号强度数据(时间戳、设备ID、信号值),计算每个设备的平均强度并可视化。 ‌步骤‌: 1. 数据读取与计算: python import pandas as pd data = pd.read_csv('signal_data.csv') avg_signal = data.groupby('device_id')['signal'].mean() 2. 绘制柱状图: python avg_signal.plot(kind='bar', title='Average Signal Strength by Device') ‌解释‌:结合通信专业常见数据分析需求,培养数据处理能力。 ‌任务3:模拟通信日志存储与检索(Python+MySQL)‌ ‌要求‌:在MySQL中创建日志表(日志ID、时间、事件类型、描述),用Python实现按时间范围查询。 ‌步骤‌: 1. MySQL表创建: sql CREATE TABLE comm_logs ( log_id INT AUTO_INCREMENT PRIMARY KEY, time DATETIME, event_type VARCHAR(20), description TEXT ); 2. Python时间范围查询: python import mysql.connector db = mysql.connector.connect(host="localhost", user="root", database="comm_db") start_date = input("输入开始时间(YYYY-MM-DD): ") end_date = input("输入结束时间(YYYY-MM-DD): ") cursor.execute("SELECT * FROM comm_logs WHERE time BETWEEN %s AND %s", (start_date, end_date)) ‌解释‌:模拟真实通信运维场景中的日志管理需求。
06-20
<think>嗯,用户想了解如何从MySQL数据库读取数据并导入到功能模块中。从ta引用的资料来看,用户应该有一定技术基础,至少熟悉Python和数据库概念,但可能缺乏具体操作经验。ta提到的四个引用很有趣:引用1讲Python操作MySQL基础流程,引用2介绍Pythondbm模块,引用3展示用xlrd/openpyxl导入Excel到MySQL,引用4提了JDBC编程。虽然用户最后明确要的是“从MySQL读取数据导入功能模块”,但ta提供的引用反而更多讲“如何把外部数据导入MySQL”😂这说明用户可能混淆了数据流向,需要帮ta理清。用户真正的需求应该是:“如何在代码中连接MySQL,查询数据,并将结果传递给其他功能模块处理”。核心就是数据库连接+数据获取+模块对接三部分。考虑到ta引用中多次出现Python,重点用Python实现比较稳妥。技术要点应该包括:1)连接部分:推荐用PyMySQLmysqlclient,要说明连接字符串格式(特别注意端口和charset)2)数据获取:演示execute+fetchall组合,强调防止SQL注入的参数化查询3)模块对接:关键是把cursor结果转换为模块能接受的格式,比如pandasDataFrame、JSON或类对象用户没有指定功能模块类型,所以需要通用性方案。可以提两个典型场景:如果模块要求结构化数据,用pandas封装;如果是普通函数,直接遍历cursor。dbm模块引用虽不直接相关,但暗示用户可能需要本地缓存,可以在注意事项里补充。安全方面要提醒三点:连接信息加密、close资源管理、避免字符串拼接SQL。性能方面暗示用cursor迭代而非fetchall全加载,特别是大数据量时。</think> 以下是根据您需求整理的 **从MySQL数据库读取数据并导入功能模块的标准实现方案**,以Python为例(其他语言逻辑类似): --- ### **核心流程** ```mermaid graph LR A[连接MySQL数据库] --> B[执行SQL查询] B --> C[获取数据集] C --> D[数据预处理] D --> E[导入功能模块] ``` --- ### **具体步骤** #### 1. **连接数据库** 使用PyMySQLmysql-connector建立连接(需提前安装库): ```python import pymysql # 连接配置(实际使用需加密存储密码) connection = pymysql.connect( host='localhost', # 数据库IP user='your_username', # 用户名 password='your_pwd', # 密码 database='your_db', # 数据库名 port=3306, # 端口 charset='utf8mb4' # 编码 ) ``` #### 2. **执行查询并获取数据** ```python try: with connection.cursor() as cursor: # 执行SQL查询(参数化防止注入) sql = "SELECT id, name, value FROM your_table WHERE category=%s" cursor.execute(sql, ('electronics',)) # 替换实际参数 # 获取全部数据(大数据量建议分批次) data = cursor.fetchall() # 返回元组列表:[(1, '电阻', 10.5), (2, '电容', 3.2)...] finally: connection.close() # 必须关闭连接! ``` #### 3. **数据预处理** 将原始数据转换为功能模块需要的格式: ```python import pandas as pd # 常用数据处理库 # 转换为DataFrame(适合数值分析模块) df = pd.DataFrame(data, columns=['id', 'name', 'value']) # 或转换为字典列表(适合API接口) dict_list = [{'id': row[0], 'name': row[1], 'value': row[2]} for row in data] ``` #### 4. **导入功能模块** 假设有数据分析模块 `analysis_module`: ```python from analysis_module import calculate_statistics # 导入处理后的数据 result = calculate_statistics(df) # 传入DataFrame print(f"分析结果:{result}") ``` --- ### **关键注意事项** 1. **连接安全** - 密码需通过环境变量或加密存储(例如 `dotenv` 库) - 生产环境使用SSH隧道或VPC内网连接 2. **性能优化** - 大数据量使用 `cursor.fetchmany(1000)` 分批读取 - 添加索引加速查询(参考引用[4]的SQL优化思路[^4]) 3. **异常处理** ```python try: # 数据库操作 except pymysql.Error as e: print(f"数据库错误: {e.args[1]}") finally: connection.close() # 确保资源释放 ``` --- ### **典型应用场景** 1. 将MySQL中的用户数据导入机器学习模型训练[^3] 2. 实时读取设备传感器数据到监控告警模块 3. 同步订单数据至财务结算系统(类似引用[1]的逆向流程[^1]) --- ### 相关问题 1. 如何安全地存储数据库连接凭证? 2. 读取百万级数据时如何避免内存溢出? 3. 除了Python,Java如何实现MySQL数据到模块的传递(参考JDBC编程[^4])? 4. 数据预处理阶段常用的清洗方法有哪些?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值