Post

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)

数据库选择

  1. 连接定义时,指定
  2. cursor执行 sql语句指定
  3. 使用代码 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.