Skip to content

PyMsql

连接数据库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pymysql

db = pymysql.connect('localhost', 'root', '123456', 'test_db')

cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print(data)
db.close()
"""
('8.0.16',)
"""

创建数据表

创建一个 books 图书表,books 表包含 id(主键)、name(图书名称)、category(图书分类)、price(图书价格)和 publish_time(出版时间) 5 个字段

SQL 语句如下:

1
2
3
4
5
6
7
8
CREATE TABLE books (
    id int(8) NOT NULL AUTO_INCREMENT,
    name varchar(50) NOT NULL,
    category varchar(50) NOT NULL,
    price decimal(10, 2) DEFAULT NULL,
    publish_time date DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

在创建数据表前,使用如下语句(注意⚠️:删除前请慎重,如果当前数据库有 books 表,请确认一下是不是真的可以删除,否则还是新建一个数据库来做这些操作):

1
DROP TABLE IF EXISTS `books`;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pymysql

db = pymysql.connect('localhost', 'root', '123456', 'test_db')

cursor = db.cursor()
sql = """
CREATE TABLE books (
    id int(8) NOT NULL AUTO_INCREMENT,
    name varchar(50) NOT NULL,
    category varchar(50) NOT NULL,
    price decimal(10, 2) DEFAULT NULL,
    publish_time date DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
"""
cursor.execute(sql)
cursor.execute('SHOW COLUMNS FROM books')
data = cursor.fetchall()
print(data)
db.close()
"""
(('id', 'int(8)', 'NO', 'PRI', None, 'auto_increment'), ('name', 'varchar(50)', 'NO', '', None, ''), ('category', 'varchar(50)', 'NO', '', None, ''), ('price', 'decimal(10,2)', 'YES', '', None, ''), ('publish_time', 'date', 'YES', '', None, ''))
"""

操作 MySQL 数据表

可以使用executemany()方法向数据表中批量添加多条记录,executemany()方法格式:executemany(operation, seq_of_params)
operation:操作的 SQL语句;seq_of_params:参数序列

 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
import pymysql

db = pymysql.connect('localhost', 'root', '123456', 'test_db')

cursor = db.cursor()
data = [
    ('演员的自我修养', '人文', '66.6', '2066-6-6'),
    ('不要香菜', '科学', '6', '1996-6-30')
]


try:
    cursor.executemany('insert into books(name, category, price, publish_time) values (%s,%s,%s,%s)', data)
    db.commit()
except:
    db.rollback()

cursor.execute('select * FROM books')
data = cursor.fetchall()
print(data)

db.close()

"""
((3, '演员的自我修养', '人文', Decimal('66.60'), datetime.date(2066, 6, 6)), (4, '不要香菜', '科学', Decimal('6.00'), datetime.date(1996, 6, 30)))
"""