Python笔记----操作MySQL数据库
1.执行DDL语句
MySQL 数据库有服务器进程,默认通过 3306 端口对外提供服务。因此, Python 程序,在连接 MySQL 数据库时可指定远程服务器 IP 地址和端口,如果不指定服务器 IP 地址和端口,则使用默认的服务器 IP 地址 localhost 和默认端口 3306。
下面程序示范了如何连接 MySQL 数据库,并通过 DDL 语句来创建两个数据表。
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
host='localhost', port='3306',
database='python', use_unicode=True)
# 获取游标
c = conn.cursor()
# 执行DDL语句建表
c.execute('''create table user_tb(
user_id int primary key auto_increment,
name varchar(255),
pass varchar(255),
gender varchar(255))''')
c.execute('''create table order_tb(
order_id integer primary key auto_increment,
item_name varchar(255),
item_price double,
item_number double,
user_id int,
foreign key(user_id) references user_tb(user_id))''')
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
运行程序后可以看到数据库表已经建好。
2.执行DML语句
MySQL 数据库模块同样可以使用游标的 execut()方法执行DML 的insert,update, delete语句,对数据库进行插入、修改和删除数据操作。
例如,如下程序示范了向数据库的两个数据表分别插入一条数据:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
host='localhost', port='3306',
database='python', use_unicode=True)
# 获取游标
c = conn.cursor()
# 执行插入语句
c.execute('insert into user_tb values(null, %s, %s, %s)',
('孙悟空', '123456', 'male'))
c.execute('insert into order_tb values(null, %s, %s, %s, %s)',
('鼠标', '34.2', '3', 1))
# 提交事务
conn.commit()
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
运行结果如下:
MySQL 数据库模块同样支持使用executemany()方法重复执行一条 SQL语句。例如如下程序:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.executemany('insert into user_tb values(null, %s, %s, %s)',
(('sun', '123456', 'female'),
('bai', '123456', 'female'),
('zhu', '123456', 'male'),
('niu', '123456', 'male'),
('tang', '123456', 'male')))
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
MySQL 数据库模块的连接对象有一个 autocommit 属性,如果将该属性设为 True ,则意味着关闭该连接的事务支持,程序每次执行 DML 语句之后都会自动提交,这样程序就无须调用连接对象的commit() 方法来提交事务了。
执行updata语句:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.execute('update user_tb set gender=%s where user_id=%s',
('female', 2))
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
执行delete语句:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.execute('delete from user_tb where user_id=2')
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
3.执行查询语句
如下程序示范 MySQL 数据库中 数据:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.execute('select * from user_tb where user_id > %s',
(2, ))
# 通过游标的description属性获取列信息
for col in c.description:
print(col[0], end='\t')
print('\n----------------------------')
# 使用for-in循环来遍历游标中的结果集
for row in c:
print(row)
print(row[1] + '-->' + row[2])
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
MySQL 数据库模块的游标对象同样支持 fetchone()、 fetchman ()、 fetchall () 方法。
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.execute('select * from user_tb where user_id > %s',
(2, ))
# 通过游标的description属性获取列信息
for col in c.description:
print(col[0], end='\t')
print('\n----------------------------')
# 使用for-in循环来遍历游标中的结果集
while True:
# 获取一条记录,每行数据都是一个元组
row = c.fetchone()
if not row:
break
print(row)
print(row[1] + '-->' + row[2])
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(user='root', password='',
database='python', port='3306',
host='localhost', use_unicode=True)
# 创建游标
c = conn.cursor()
conn.autocommit = True
# 使用executemany()重复执行一条SQL语句
c.execute('select * from user_tb where user_id > %s',
(2, ))
# 通过游标的description属性获取列信息
for col in c.description:
print(col[0], end='\t')
print('\n----------------------------')
# 使用for-in循环来遍历游标中的结果集
while True:
# 每次获取3条数据,该方法返回一个由3条记录组成的列表
rows = c.fetchmany(3)
if not rows:
break
for r in rows:
print(r)
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
4.调用存储过程
关于存储过程百度百科:
MySQL 库模块为 标对象提供了一个非标准 callproc(self,procname, args=())方法, 该方法用于调用数据库存储过程。该方法 procname 参数代表存储过程的名字, args 参数则用于为存储过程传入参数。