Python3访问MySQL数据库快速入门Demo

devtools/2024/11/18 7:35:00/

要实现一个简单的IM(即时通讯)系统,支持用户注册、登录和聊天记录存储,你可以使用Python和mysql数据库。以下是一个基本的实现示例: 要使用MySQL创建表并通过Python提供一个API服务,你可以使用Flask框架来实现API服务,并使用PyMySQL库来连接MySQL数据库。以下是一个基本的实现步骤:

1. 安装所需库

首先,确保你安装了Flask和PyMySQL库:

pip install flask pymysql

2. MySQL数据库设置

docker run --hostname=a5ddc3708f2e --env=MYSQL_ROOT_PASSWORD=123456 --env=MYSQL_DATABASE=jwordpress --env=TZ=Asia/Shanghai --env=LANG=en_US.UTF-8 --env=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=GOSU_VERSION=1.7 --env=MYSQL_MAJOR=5.7 --env=MYSQL_VERSION=5.7.26-1debian9 --volume=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker\mysql\my.cnf:/etc/mysql/my.cnf:rw --volume=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker\mysql\init-file.sql:/etc/mysql/init-file.sql:rw --volume=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker\mysql\data:/var/lib/mysql:rw --volume=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker\mysql\docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:rw --volume=/var/lib/mysql --network=docker_default -p 3306:3306 --restart=unless-stopped --label='com.docker.compose.config-hash=f33622a4d32e092d39a39c3dc0bd2259df09b24ad897567bcaa7f7fa0630b019' --label='com.docker.compose.container-number=1' --label='com.docker.compose.depends_on=' --label='com.docker.compose.image=sha256:a1aa4f76fab910095dfcf4011f32fbe7acdb84c46bb685a8cf0a75e7d0da8f6b' --label='com.docker.compose.oneoff=False' --label='com.docker.compose.project=docker' --label='com.docker.compose.project.config_files=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker\docker-compose.yml' --label='com.docker.compose.project.working_dir=D:\IdeaProjects\Jwordpress-parent-s02-81f3dea303558f4388ef39435a52ea1cfab22904\docker' --label='com.docker.compose.service=mysql' --label='com.docker.compose.version=2.21.0' --runtime=runc -d registry.cn-hangzhou.aliyuncs.com/zhengqing/mysql:5.7

假设你已经在MySQL中创建了一个数据库,接下来创建用户和消息表。

CREATE DATABASE chat_db;USE chat_db;CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255) UNIQUE NOT NULL,password VARCHAR(255) NOT NULL
);CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY,sender VARCHAR(255) NOT NULL,receiver VARCHAR(255) NOT NULL,message TEXT NOT NULL,timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

3. 创建Flask API服务

一个简单的Flask应用,提供注册、登录和发送消息的API。 详见main.py

from flask import Flask, request, jsonify
import pymysql
import bcryptapp = Flask(__name__)# Database connection configuration
db_config = {'host': 'localhost','user': 'root','password': '123456','database': 'chat_db'
}def get_db_connection():return pymysql.connect(**db_config)@app.route('/register', methods=['POST'])
def register():data = request.jsonusername = data['username']password = data['password']hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())conn = get_db_connection()cursor = conn.cursor()try:cursor.execute("INSERT INTO users (username, password) VALUES (%s, %s)", (username, hashed))conn.commit()return jsonify({'message': 'Registration successful!'}), 201except pymysql.IntegrityError:return jsonify({'message': 'Username already exists!'}), 400finally:cursor.close()conn.close()@app.route('/login', methods=['POST'])
def login():data = request.jsonusername = data['username']password = data['password']conn = get_db_connection()cursor = conn.cursor()try:cursor.execute("SELECT password FROM users WHERE username = %s", (username,))result = cursor.fetchone()if result and bcrypt.checkpw(password.encode('utf-8'), result[0].encode('utf-8')):return jsonify({'message': 'Login successful!'}), 200else:return jsonify({'message': 'Incorrect username or password!'}), 401finally:cursor.close()conn.close()@app.route('/send_message', methods=['POST'])
def send_message():data = request.jsonsender = data['sender']receiver = data['receiver']message = data['message']conn = get_db_connection()cursor = conn.cursor()cursor.execute("INSERT INTO messages (sender, receiver, message) VALUES (%s, %s, %s)", (sender, receiver, message))conn.commit()cursor.close()conn.close()return jsonify({'message': 'Message sent successfully!'}), 201@app.route('/get_messages', methods=['GET'])
def get_messages():user1 = request.args.get('user1')user2 = request.args.get('user2')conn = get_db_connection()cursor = conn.cursor()cursor.execute('''SELECT sender, receiver, message, timestamp FROM messages WHERE (sender = %s AND receiver = %s) OR (sender = %s AND receiver = %s)ORDER BY timestamp''', (user1, user2, user2, user1))messages = cursor.fetchall()cursor.close()conn.close()return jsonify(messages), 200if __name__ == '__main__':app.run(debug=True)

4. 运行API服务

将上述代码保存为一个Python文件(例如main.py),然后运行:

python main.py

这将启动一个Flask开发服务器,你可以通过POST请求来注册和登录用户,通过GET请求来获取聊天记录。

5. 测试

post http://127.0.0.1:5000/register

{"username": "alice","password": "password123"
}

post http://127.0.0.1:5000/register

{"username": "bob","password": "password123"
}

post http://127.0.0.1:5000/send_message

{"sender": "alice","receiver": "bob","message": "Hello Bob!"
}

get http://127.0.0.1:5000/get_messages?user1=alice&user2=bob

[["alice","bob","Hello Bob!","Fri, 15 Nov 2024 16:06:33 GMT"]
]

请注意,这个示例是一个基本实现,适用于学习和测试。在生产环境中,你需要考虑更多的安全性和性能优化,例如使用HTTPS、添加身份验证令牌等。


http://www.ppmy.cn/devtools/134901.html

相关文章

《Probing the 3D Awareness of Visual Foundation Models》论文解析——单图像表面重建

一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…

Python自动检测requests所获得html文档的编码

使用chardet库自动检测requests所获得html文档的编码 使用requests和BeautifulSoup库获取某个页面带来的乱码问题 使用requests配合BeautifulSoup库,可以轻松地从网页中提取数据。但是,当网页返回的编码格式与Python默认的编码格式不一致时&#xff0c…

【HOT100第四天】除自身以外数组的乘积,矩阵置零,螺旋矩阵,旋转图像

今天感觉是边界值练习专场。。。整体难度不大但是细节还是需要多动手写一写。 238. 除自身以外的数组的乘积 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意…

【C语言】连接陷阱探秘(2):命令冲突与static修饰符

目录 一、命令冲突 1.1. 常见情况及原因 1.1.1. 符号重定义冲突 1.1.2. 不同编译单元中静态函数调用冲突 1.2. 解决办法 1.3. 示例 二、static 修饰符的陷阱与缺陷 2.1. 变量方面的陷阱 2.1.1. 静态局部变量的初始化顺序问题 2.1.2. 静态全局变量的作用域误解 2.2. …

【AI图像生成网站Golang】项目架构

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与调试(等待更新) 四、项目架构 本项目的后端基于Golang和Gin框架开发,主要包括的模块有: backend/ ├── …

第8章:TDengine 开发、测试、生产三大环境中数据库创建指南

TDengine 开发、测试、生产三大环境中数据库创建指南 TDengine3.0社区版在开发、测试、以及生产三大环境中数据库创建SQL语句以及相应参数的说明文档。 一、概述 TDengine3.0社区版是一款开源、高性能、云原生的时序数据库,支持SQL语法,并针对时序数据进行了优化。在开发、…

QT适配最新版Android SDK

从AndroidStudio的SDK管理下载最新版SDK 从https://www.androiddevtools.cn/下载国内安卓SKDTools 这里下载SKDTools后不需要使用SDK Manager.exe下载SDK(SDK Manager.exe下载的SDK都是旧版,没法支持新版本),直接使用从AndroidS…

web-02

回顾 full stack web前端 结构(html) 样式(css) 动作/交互(js) html html常用标签 扩展标签 列表 ul/ol u–un – 无序的 o-order --有顺序的 <ol> 你最喜欢的游戏是什么&#xff1f;<li>bar sleep</li><li>who knows</li> </ol>布…