python下如何对MySQL数据库调用及操作

@ [TOC](MySQL学习)

#一,管理MySQL

1. MySQL管理

Windows启动,关闭MySQL服务器

  1. 启动 展示进入的MySQL的仓目录下:的mysqld --console 2. 关闭中mysqladmin -uroot关机

linux中启动和关闭

  1. 检查是否已开启MySQL服务器ps -ef | grep的mysqld的 2. 启动服务器:

``javascript
root @ host#cd / usr / bin 。/ mysqld_safe &```

  1. 关闭服务器:
    ``javascript
    root @ host#cd / usr / bin 。/中mysqladmin - ü根- p关机```

MySQL命令

  1. 使用数据库
使用数据库名```

2. 查看所有数据库

“``javascript
 mysql >  显示 数据库; ```

3. 显示指定数据库的所有表:

```javascript
mysql> use 数据库名;
Database changed
mysql> SHOW TABLES;
  1. 输出Mysql数据库管理系统的性能及统计信息:
mysql> SHOW TABLE STATUS  FROM RUNOOB;   # 显示数据库 RUNOOB 中所有表的信息

mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%';     # 表名以runoob开头的表的信息
mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G;   # 加上 \G,查询结果按列打印

添加MySQL用户

1.添加MySQL用户需在mysql的user表中添加:用户名,密码,SELECT,INSERT,UPDATE。(SELECT,INSERT,UPDATE为N/Y)

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> INSERT INTO user 
          (host, user, authentication_string, 
           select_priv, insert_priv, update_priv) 
           VALUES ('localhost', 'username01', 
           MD5('pw123456'), 'Y', 'Y', 'Y');
// 刷新MySQL的系统权限,使修改立即生效
mysql> FLUSH PRIVILEGES;
// 查询用户
mysql> SELECT host, user, password FROM user WHERE user = 'username01';

2.给指定数据库添加用户user02,密码123456

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
    -> ON TUTORIALS.*
    -> TO 'user02'@'localhost'
    -> IDENTIFIED BY '123456';

相关用户权限设置:

权限名称
host
user
authentication_string
Select_priv
Insert_priv
Update_priv
Create_priv
Drop_priv
Shutdown_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv

2. Python 连接 MySQL

  1. 连接MySQL
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "用户名", "密码", "数据库", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL语句
sql = """
	  SQL语句
	  """
try:
	# 使用execute方法执行SQL语句
	cursor.execute(sql )
	# 提交到数据库执行
   db.commit()
except:
   # 回滚,以防出现任何错误
   db.rollback()

# 使用 fetchone() 方法获取一条数据
data = cursor.fetchone()
# 使用 fetchall() 方法获取多条数据
data = cursor.fetchall()
print(data)

# 关闭数据库连接
db.close()

二、数据库操作

1. 创建数据库

CREATE DATABASE 数据库名;

2. 查看所有数据库

show databases;

3. 删除数据库

mysql> drop database <数据库名>;

在终端删除数据库

[root@host]# mysqladmin -u root -p drop 数据库名
Enter password:******

三、数据表操作

1.创建数据表

CREATE TABLE IF NOT EXISTS `表名`(
   `列名` 类型 属性,
  ...
   PRIMARY KEY ( `列名` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
# 如:
CREATE TABLE IF NOT EXISTS `表名`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 显示指定数据库的所有表:

use 数据库名;
show tables;

3.删除数据表

DROP TABLE 数据表;

4. 修改表名

# 使用 rename
alter table table_name rename to new_table_name;

5. 显示数据表的属性

SHOW COLUMNS FROM 数据表;

6. 显示数据表的详细索引信息,包括PRIMARY KEY(主键)。

SHOW INDEX FROM 数据表;

四、数据操作

1. 插入数据

insert into 表名( 字段名1, 字段名2,...字段名N )
                       VALUES
                       ( value1, value2,...valueN );

2. 查询数据

select column_name,column_name
from 表名
[where Clause]
[limit N][ offset M]

3. update 更新数据

update 表名 set field1=new-value1, field2=new-value2
[WHERE Clause]

4. where 条件子句

select * from 表名 where 条件

5. delete 删除语句

delete from table_name [WHERE Clause]

6. like 语句

%字符表示任意字符

select field01,... from field01 like condition1 [AND [OR]] filed01 = '%SQL%'

7. union

union 连接多个select语句,并去除重复数据。
all 返回所有数据(包括重复数据),distinct 删除重复数据。

select expression1 from tables [WHERE conditions]
union [all| distinct]
select expression1 from tables [WHERE conditions];

8. 排序 order by

ASC 升序,DESC降序,默认 ASC

select field1,field2,.. FROM table_name1,table_name2,..
order by field1 [ASC [DESC]], [field2...] [ASC [DESC]]

9. 分组 group by

select column_name, function(column_name)
from table_name
where column_name operator value
group by column_name;

with rollup 实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

coalesce 取代 “NULL”,
a == null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null。

select coalesce(name, '总数'), SUM(singin) as singin_count from employee_tbl group by name with rollup

五、JOIN 多表查询数据

python下如何对MySQL数据库调用及操作_第1张图片

1. 内连接:INNER JOIN

(内连接,或等值连接):获取两个表中字段匹配关系的记录。

SELECT a.column_id, a.column_author, b.column_count FROM 
table01 a INNER JOIN table02 b  
ON a.column_author = b.column_author;

使用where 子句也能实现该效果

SELECT a.column_id, a.column_author, b.column_count 
FROM table01 a, table02 b 
WHERE a.column_author = b.column_author;

2. 左连接:LEFT JOIN

获取左表所有记录,即使右表没有对应匹配的记录。

SELECT a.column_id, a.column_author, b.column_count 
FROM table01 a LEFT JOIN table02 b 
ON a.column_author = b.column_author;

3. 右连接: RIGHT JOIN

用于获取右表所有记录,即使左

SELECT a.column_id, a.column_author, b.column_count 
FROM table01 a RIGHT JOIN table02 b 
ON a.column_author = b.column_author;

六、NULL值处理

1. IS NULL

当列的值是NULL,此运算符返回true。

select *  from tableName where columnName1 is null;

2. IS NOT NULL

当列的值不为NULL,运算符返回true。

select *  from tableName where columnName1 is not null;

3. 比较操作符 <=>

比较操作符(变量=运算符),当比较器的两个值都为NULL时返回true。

表没有对应匹配的记录。

注意:

select * , columnName1+ifnull(columnName2,0) from tableName;

columnName1,columnName2 为 int 型,当 columnName2 中,有值为 null 时,columnName1+columnName2=null, ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。

七、正则表达式 regexp

SELECT name FROM tableName1 WHERE name REGEXP '正则表达式';

八、MySQL 事务

1. 事务控制语句:

begin 或 start transaction 开启事务
commit 提交事务
rollback 事务回滚,撤销正在进行的所有未提交的修改;
savepoint identifier savepoint 在事务中创建一个保存点;
release savepoint identifier 删除一个事务的保存点
rollback to identifier 把事务回滚到标记点;
set transaction 设置事务的隔离级别

set transaction 设置事务的隔离级别:

读取未提交 read uncommitted
读取已提交 读取已提交
可重复读取 repeatable read
可序列化 serializable
begin;  # 开始事务
# 需执行的语句
insert into ...
insert into ...
commit; # 提交事务
# 声明一个 savepoint保留点 
SAVEPOINT savepoint_name;

# 回滚到savepoint
ROLLBACK TO savepoint_name;

# 删除保存点
release savepoint savepoint_name;

九、alter 命令删除,添加、修改表字段

1. 删除字段

# drop 删除column_name字段
alter table table_name  drop column_name;

2. 添加字段

# add 添加column_name字段
alter table table_name  add column_name int [ first [after column_name]];

# 1. first 设定在第一列,2. after 字段名 (设定在该字段名之后)

3. 修改字段modify、change

# modify 修改column_name字段类型
alter table table_name  modify column_name char(20);

# change 修改字段:alter table 表名 change 需修改的列名 修改后 类型 [属性];
alter table table_name change column_name01 column_name02 int;

4. 修改字段默认值 alter

# 修改字段默认值
alter table table_name alter column_name set default value_01;

# 删除字段的默认值
alter table table_name alter column_name drop default;

持续更新…

你可能感兴趣的:(python下如何对MySQL数据库调用及操作)