这里基于docker环境安装mysql,并使用python访问数据库,执行sql操作、恢复数据、检查语法。
测试数据和示例代码整理自网络资料。
1 mysql安装
首先是mysql安装,这里使用docker方案安装mysql。
假设docker已经安装,安装过程参考参考如下链接。
https://blog.csdn.net/liliang199/article/details/150067330
1.1 拉取镜像
docker pull mysql:8
1.2 验证镜像
docker images
1.3 持久化存储
mkdir -p /data/dockerData/mysql/{conf,data,logs}
1.4 启动数据库
创建配置文件
/data/dockerData/mysql/conf/my.cnf
mysql
default-character-set=UTF8MB4
mysqld
port=3306
max_connections=200
character-set-server=UTF8MB4
启动容器
docker run -d \
--name my-mysql \
-p 3306:3306 \
-v /data/dockerData/mysql/conf:/etc/mysql/conf.d \
-v /data/dockerData/mysql/data:/var/lib/mysql \
-v /data/dockerData/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD=mysql \
mysql:8 sleep 9999999999999
登录容器
docker exec -it my-mysql bash
1.5 初始化数据库
登录mysql,密码是启动容器时设置的mysql
mysql -uroot -p
开放远程访问
UPDATE user SET host='%' WHERE user='root';
FLUSH PRIVILEGES;
创建数据库
CREATE DATABASE mydatabase
2 python连接
2.1 安装pymysql
首先安装pymysql
pip install pymysql
2.2 连接数据库
import pymysql
# 创建数据库连接
db = pymysql.connect(
host="localhost",
user="root",
password="mysql",
database="mydatabase"
)
print("数据库连接成功!")
cursor = db.cursor()
2.3 创建表
cursor.execute("""CREATE TABLE documents
(id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
retriever_name TEXT NOT NULL,
pages INT NOT NULL,
tag TEXT NOT NULL);""")
2.4 insert数据
导入如下数据,这里使用llama2和nvida a100 archtecture两个文档测试。
(1, 'llama2', 'retriever_1', 20, 'LLM')
(2, 'nvidia a100 architecture', 'retriever_2', 30, 'programming')
insert代码示例如下
cursor.execute("INSERT INTO documents (id, name, retriever_name, pages, tag) VALUES (1, 'llama2', 'retriever_1', 20, 'LLM');")
cursor.execute("INSERT INTO documents (id, name, retriever_name, pages, tag) VALUES (2, 'nvidia a100 architecture', 'retriever_2', 30, 'programming');")
db.commit()
2.5 查询数据
sql = "SELECT * FROM documents WHERE name = %s"
name = ("llama2",)
cursor.execute(sql, name)
results = cursor.fetchall()
for row in results:
print(row)
输出如下
(1, 'llama2', 'retriever_1', 20, 'LLM')
2.6 删除表
cursor.execute("DROP TABLE contracts;")
3 数据库恢复
3.1 准备sql文件
基于现有的sql文件恢复数据库,这里sql文件来自chinook-database的如下连接。
3.2 运行恢复程序
恢复程序如下所示,运行完成即完成数据库恢复。
#!/usr/bin/env python3
# coding: utf-8
import pymysql
sql_host = 'localhost'
sql_user = 'root' # 数据库登陆用户
sql_pwd = 'mysql' # 数据库登陆密码
database_name = 'mydatabase' # 数据库名字
sql_path = './Chinook_MySql.sql' # 存放sql文件的地址
connect = pymysql.connect(host=sql_host, user=sql_user, password=sql_pwd, database=database_name)
cursor = connect.cursor()
try:
with open(sql_path,encoding='utf-8',mode='r') as f:
# 读取整个sql文件,以分号切割。[:-1]删除最后一个元素,也就是空字符串
sql_list = f.read().split('\n')
sql_cmd = ""
for x in sql_list:
sql_cmd += x
# sql语句添加分号结尾
if str(sql_cmd).strip().endswith(";") == True:
cursor.execute(sql_cmd)
print("执行成功sql: %s"%sql_cmd)
sql_cmd = ""
if str(sql_cmd).strip().endswith(";") == True:
cursor.execute(sql_cmd)
print("执行成功sql: %s"%sql_cmd)
except Exception as e:
print(e)
print('执行失败sql: %s'%sql_cmd)
finally:
# 关闭mysql连接
cursor.close()
connect.commit()
connect.close()
4 语法检查
4.1 安装sqlparse
安装sql语法检查包
pip install sqlparse
4.2 语法检查
语法检查示例程序
# 解析SQL语句
import sqlparse
def check_sql_syntax(sql):
try:
parsed = sqlparse.parse(sql)
if not parsed:
return False, "Invalid SQL syntax"
return True, "SQL syntax is correct"
except Exception as e:
return False, str(e)
sql = "SELECT * FROM users WHERE id = 1"
is_valid, message = check_sql_syntax(sql)
print(message)
reference
docker安装mysql详细指南(2025最新版)
https://www.cnblogs.com/baofuba187/p/19057123
MySQL Python 连接与使用
https://www.runoob.com/mysql/mysql-python-intro.html
chinook-database
https://github.com/lerocha/chinook-database/tree/master
使用Python脚本高效导入MySQL数据库的SQL文件教程
python如何检查sql语法
https://docs.pingcode.com/baike/864425
llama2
https://arxiv.org/pdf/2307.09288
nvidia a100白皮书pdf