Pymysql
Python 连接 Mysql 的操作
Pymysql
数据库定义连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pymysql
# 定义数据库链接
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='123456',
db='mysql', # 可指定数据库
charset='utf8'
)
print(conn.host_info)
sql语句执行
1
2
3
4
5
6
7
# 获取数据库游标对象
cur = conn.cursor()
# 创建数据库
sql = 'create database if not exists db_hbwl'
cur.execute(sql)
数据库选择
- 连接定义时,指定
- cursor执行 sql语句指定
- 使用代码 conn.select_db(db_name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 创建数据库
sql = 'create database if not exists db_hbwl'
cur.execute(sql)
# 选择数据库
sql = 'use db_hbwl;'
cur.execute(sql)
# conn.select_db('db_1104') cursor = conn.cursor()
# 用于频繁切换数据库
# 创建表字段
sql = '''CREATE TABLE if not exists game_info (
id INT(11) PRIMARY KEY,
game_name VARCHAR(255),
game_type VARCHAR(255),
game_href VARCHAR(255),
game_time DATETIME,
game_img VARCHAR(255)
);'''
cur.execute(sql)
开、关、回滚事务
1
2
3
4
5
6
7
8
9
10
11
try:
conn.begin()
# 提交事务
conn.commit()
except Exception as e:
# 事务回滚
conn.rollback()
print(f"发生异常:{e}")
增删改查
- truncate table name – 删除表中所有数据,重建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 增
sql = '''
INSERT INTO game_info (id, game_name, game_type, game_href, game_time, game_img) VALUES
(1, 'The Legend of Zelda: Breath of the Wild', 'Action-Adventure', 'https://www.zelda.com/breath-of-the-wild/', '2023-03-01 10:00:00', 'https://example.com/img1.jpg'),
(2, 'Super Mario Odyssey', 'Platformer', 'https://www.nintendo.com/games/detail/super-mario-odyssey-switch/', '2023-03-02 11:00:00', 'https://example.com/img2.jpg'),
(3, 'Minecraft', 'Sandbox', 'https://www.minecraft.net/en-us', '2023-03-03 12:00:00', 'https://example.com/img3.jpg'),
(4, 'Fortnite', 'Battle Royale', 'https://www.epicgames.com/fortnite/en-US/home', '2023-03-04 13:00:00', 'https://example.com/img4.jpg'),
(5, 'League of Legends', 'MOBA', 'https://www.leagueoflegends.com/en-us/', '2023-03-05 14:00:00', 'https://example.com/img5.jpg');
'''
cur.execute(sql)
# 删
sql = 'DELETE FROM game_info WHERE id = 3'
cur.execute(sql)
# 改
sql = 'UPDATE game_info SET game_name = "Minecraft" WHERE id = 2'
cur.execute(sql)
# 查
sql = 'SELECT * FROM game_info'
cur.execute(sql)
result = cur.fetchall()
for row in result:
print(row)
插入进阶
1. 使用 INSERT IGNORE
如果你希望在插入时如果数据已存在则忽略这条插入,可以使用 INSERT IGNORE
:
1
2
INSERT IGNORE INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
2. 使用 INSERT ... ON DUPLICATE KEY UPDATE
如果你希望在插入时,如果数据已存在则更新现有记录,可以使用 INSERT ... ON DUPLICATE KEY UPDATE
:
1
2
3
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2;
3. 使用 REPLACE INTO
另一种方法是使用 REPLACE INTO
,这会尝试插入新行,如果有冲突(通常是主键冲突),则删除旧行并插入新行:
1
2
REPLACE INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
4. 使用条件判断
如果你希望在插入之前检查某个条件,可以使用一个 SELECT
查询结合控制流,但这通常会更复杂:
1
2
3
4
5
SET @exists = (SELECT COUNT(*) FROM your_table WHERE some_condition);
IF @exists = 0 THEN
INSERT INTO your_table (column1, column2, ...)
VALUES (value1, value2, ...);
END IF;
This post is licensed under CC BY 4.0 by the author.