发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。

1. 连接mysql

使用 PyMySQL 连接和操作 MySQL 数据库是一个相对直接的过程。以下是一个详细的入门指南,涵盖如何安装 PyMySQL、建立连接、执行查询和关闭连接。

1.1 安装 PyMySQL

首先,您需要安装 PyMySQL 库。打开命令行(在 Windows 上是命令提示符或 PowerShell,在 macOS 或 Linux 上是终端),然后运行以下命令:

pip install pymysql

如果您使用的是 Python 3,请确保使用的是适用于 Python 3 的 PyMySQL 版本。

1.2 导入 PyMySQL

在您的 Python 脚本中,导入 PyMySQL 模块:

import pymysql

1.3 建立连接

要连接到 MySQL 数据库,您需要提供一些连接信息,包括主机名、端口号(默认为 3306)、用户名、密码和数据库名。创建一个 pymysql.connect() 对象来建立连接:

connection = pymysql.connect(
    host='localhost',  # MySQL 服务器的主机名
    port=3306,         # MySQL 服务器的端口号,默认为 3306
    user='your_username',  # 数据库的用户名
    password='your_password',  # 数据库的密码
    database='your_database'  # 要连接的数据库名
)

1.4 创建游标对象

一旦建立了连接,您就可以创建一个游标对象,该对象用于执行 SQL 语句:

with connection.cursor() as cursor:
    # 执行 SQL 语句
    cursor.execute("SELECT * FROM your_table")

1.5 执行查询

使用游标对象执行查询,并获取结果:

    # 获取查询结果
    result = cursor.fetchall()
    for row in result:
        print(row)

1.6 关闭连接

完成所有操作后,关闭连接以确保不再占用资源:

connection.close()

1.7 完整示例

将所有这些步骤放在一起,您将得到一个完整的连接和查询 MySQL 数据库的示例:

import pymysql
# 建立连接
connection = pymysql.connect(
    host='localhost',
    port=3306,
    user='your_username',
    password='your_password',
    database='your_database'
)
try:
    # 创建游标对象
    with connection.cursor() as cursor:
        # 执行查询
        cursor.execute("SELECT * FROM your_table")
        
        # 获取查询结果
        result = cursor.fetchall()
        for row in result:
            print(row)
finally:
    # 关闭连接
    connection.close()

请确保将 'your_username''your_password''your_database''your_table' 替换为您的实际 MySQL 用户名、密码、数据库名和表名。

这就是使用 PyMySQL 连接和操作 MySQL 数据库的基本步骤。当然,还有更多高级功能,如执行插入、更新和删除操作,处理事务等,但基本的连接和查询是入门的第一步。

2. 连接mongodb

使用 PyMongo 连接和操作 MongoDB 数据库是一个相对直接的过程。以下是一个详细的入门指南,涵盖如何安装 PyMongo、建立连接、执行查询和关闭连接。

2.1 安装 PyMongo

首先,您需要安装 PyMongo 库。打开命令行(在 Windows 上是命令提示符或 PowerShell,在 macOS 或 Linux 上是终端),然后运行以下命令:

pip install pymongo

如果您使用的是 Python 3,请确保使用的是适用于 Python 3 的 PyMongo 版本。

2.2 导入 PyMongo

在您的 Python 脚本中,导入 PyMongo 模块:

from pymongo import MongoClient

2.3 建立连接

要连接到 MongoDB 数据库,您需要提供 MongoDB 服务器的 URI。创建一个 MongoClient 对象来建立连接:

client = MongoClient('mongodb://localhost:27017/')

这里 'localhost:27017/' 是 MongoDB 服务器的 URI,localhost 是主机名,27017 是端口号。如果您有其他主机名或端口号,请相应地修改它们。

2.4 选择数据库和集合

一旦建立了连接,您就可以选择要操作的数据库和集合:

db = client['your_database']
collection = db['your_collection']

2.5 插入文档

使用集合来插入文档:

my_document = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}
collection.insert_one(my_document)

2.6 查询文档

使用集合来查询文档:

for doc in collection.find():
    print(doc)

2.7 更新文档

更新集合中的文档:

update_result = collection.update_one(
    {"name": "John Doe"},
    {"$set": {"age": 31}}
)

2.8 删除文档

使用集合来删除文档:

delete_result = collection.delete_one({"name": "John Doe"})

2.9 关闭连接

完成所有操作后,关闭连接以确保不再占用资源:

client.close()

3.0 完整示例

将所有这些步骤放在一起,您将得到一个完整的连接和操作 MongoDB 数据库的示例:

from pymongo import MongoClient
# 建立连接
client = MongoClient('mongodb://localhost:27017/')
# 选择数据库和集合
db = client['your_database']
collection = db['your_collection']
# 插入文档
my_document = {
    "name": "John Doe",
    "age": 30,
    "city": "New York"
}
collection.insert_one(my_document)
# 查询文档
for doc in collection.find():
    print(doc)
# 更新文档
update_result = collection.update_one(
    {"name": "John Doe"},
    {"$set": {"age": 31}}
)
# 删除文档
delete_result = collection.delete_one({"name": "John Doe"})
# 关闭连接
client.close()

请确保将 'your_database''your_collection''John Doe' 替换为您的实际 MongoDB 数据库名、集合名和文档中的实际值。

这就是使用 PyMongo 连接和操作 MongoDB 数据库的基本步骤。当然,还有更多高级功能,如处理批量操作、使用索引、事务等,但基本的连接和操作是入门的第一步。

3.示例

3.1 需求分析

根据 id 把 mysql 数据库 sthee_gd_question_bank 表 paper_question 的 answer 字段的值插入到 mongodb 数据库中的 demo 库 question 集合的 answer 字段中

3.2 完整代码

import pymysql
from pymongo import MongoClient
from pymysql.cursors import DictCursor


class Execute:
    def __init__(self, que_cms_db_config: dict, subject_codes: [str]):
        self.que_cms_db_config = que_cms_db_config
        self.subject_codes = subject_codes

    def run(self):
        # 连接到 MySQL 数据库
        mysql_connection = pymysql.connect(**self.que_cms_db_config)

        # 执行 MySQL 操作
        with mysql_connection as connection, connection.cursor(DictCursor) as cursor:
            # 在这里添加你的 MySQL 查询
            cursor.execute('SELECT question_id, answer FROM paper_question')
            mysql_list = cursor.fetchall()

            # 添加调试打印语句
            print("MySQL Set:", mysql_list)

        # 连接到 MongoDB
        client = MongoClient(_sthee_mongo_url)
        db = client['demo']  # 这里硬编码了MongoDB的数据库名
        collection = db['question']  # 选择集合

        # 查询并保留指定字段
        mongodb_list = [{"question_id": doc["_id"], "answer": doc.get("answer", "")} for doc in
                        collection.find()]

        # 打印结果
        print("MongoDB Set:", mongodb_list)

        # 匹配比较并插入到 MongoDB
        for mysql_answer in mysql_list:
            for mongo_answer in mongodb_list:
                mongo_que_answer = mongo_answer.get('answer')
                mysql_que_answer = mysql_answer.get('answer')
                if mysql_answer['question_id'] == mongo_answer['question_id'] and (
                        mongo_que_answer is None or mongo_que_answer == '' and (
                        mysql_que_answer is not None and mysql_que_answer != '')):
                    # 如果 MongoDB 中对应的键值对为空,插入 MySQL 中的值
                    collection.update_one({"_id": mongo_answer['question_id']},
                                          {"$set": {"answer": mysql_answer['answer']}})

        # 打印最终结果
        updated_question_list = [{"question_id": doc["_id"], "answer": doc.get("answer", "")} for doc in
                                 collection.find()]
        print("Updated MongoDB Set:", updated_question_list)


if __name__ == '__main__':
    _que_cms_db_config = {
        'host': '127.0.0.1',
        'user': 'root',
        'password': 'root',
        'database': 'sthee_gd_question_bank'
    }
    _sthee_mongo_url = 'mongodb://127.0.0.1:27017'  # 这里可以是硬编码的MongoDB URI
    _subject_codes = ['00324']
    execute = Execute(
        que_cms_db_config=_que_cms_db_config,
        subject_codes=_subject_codes
    )
    execute.run()

3.3 代码分析

这段代码的主要功能是连接到MySQL和MongoDB数据库,并将MySQL数据库中的数据更新到MongoDB数据库中。以下是代码的分点分析:

  1. 类定义 Execute
    • __init__ 方法:接收MySQL数据库配置信息和学科代码列表作为参数,并将其存储为实例变量。
    • run 方法:执行实际的连接和操作。
  2. run 方法详细分析:
    • 连接到MySQL数据库:使用 pymysql.connect() 函数连接到MySQL数据库,使用 DictCursor 来返回字典类型的结果。
    • 执行MySQL操作:执行一个查询操作,选择 paper_question 表中的 question_idanswer 字段,并将结果存储在 mysql_list 中。
    • 连接到MongoDB数据库:使用 MongoClient 连接到MongoDB数据库,选择 demo 数据库和 question 集合。
    • 查询MongoDB操作:使用 collection.find() 查询MongoDB集合中的数据,并将结果存储在 mongodb_list 中。
    • 匹配比较并插入到MongoDB:遍历 mysql_listmongodb_list,比较每个元素,如果MongoDB中的对应记录的 answer 字段为空,则将MySQL中的 answer 值更新到MongoDB中。
    • 打印最终结果:打印更新后的MongoDB集合,以及原始的MongoDB和MySQL数据集。
  3. 代码中的硬编码:
    • MongoDB数据库的URI _sthee_mongo_url 和MongoDB数据库名 demo,集合名 question 都是硬编码在代码中的,这种做法不够灵活,应该通过参数传递。
  4. 代码的调试打印:
    • 在代码中使用了 print 函数来打印MySQL和MongoDB的数据集,以及更新后的MongoDB数据集,这样可以帮助开发者调试代码。
  5. MongoDB更新操作:
    • 使用 collection.update_one() 方法来更新MongoDB中的记录,如果MongoDB中的 answer 字段为空,则将MySQL中的 answer 值更新到MongoDB中。
      总结:这段代码的主要功能是连接到MySQL和MongoDB数据库,并将MySQL数据库中的数据更新到MongoDB数据库中。代码使用了 pymysqlpymongo 库来连接和操作数据库,通过匹配 question_id 和比较 answer 字段的值来实现数据的更新。
01-15 17:38