PyMySQL简介:
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
PyMySQL安装
#方法一
pip install PyMySQL
如果系统不支持 pip 命令,可以使用以下方式安装:
#方法二
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install
连接MySQL
1. 打开DOS窗口
2. 进入目录mysql\bin
3. 键入命令:mysql -u root -p
(mysql -h主机地址 -u用户名 -p用户密码)
MYSQL的提示符是: mysql>
连接到远程主机上的MySQL
例:远程主机的IP为:172.0.0.1,用户名为root,密码为123
则:输入一下代码:
mysql -h172.0.0.1 -u root -p 123;
退出MySql命令:
exit
修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码123456
mysqladmin -u root -password 123456
2、再将root的密码改为1234567
mysqladmin -u root -p ab12 password 1234567
增加新用户
小提示:
以下MySql环境中的命令结束都带一个“ ; ”作为命令结束符
格式:
create user '用户名'@'IP地址' identified by '密码';
指定ip:192.168.0.开头的kinney用户登录
create user 'kinney'@'192.168.0.%' identified by '123';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址'=Password('新密码');
查看权限
show grants for '用户'@'IP地址'
授权 kinney用户仅对db1.t1文件有查询、插入和更新的操作
grant select ,insert,update on db1.t1 to "kinney"@'%';
表示有所有的权限,除了grant这个命令,这个命令是root才有的。kinney用户对db1下的t1文件有任意操作
grant all privileges on db1.t1 to "kinney"@'%';
kinney用户对db1数据库中的文件执行任何操作
grant all privileges on db1.* to "kinney"@'%';
mjj用户对所有数据库中文件有任何操作
grant all privileges on *.* to "mjj"@'%';
取消权限
取消mjj用户对db1的t1文件的任意操作
revoke all on db1.t1 from ‘mjj’@”%”;
取消来自远程服务器的mjj用户对数据库db1的所有表的所有权限
revoke all on db1.* from ‘mjj’@”%”;
取消来自远程服务器的mjj用户所有数据库的所有的表的权限
revoke all privileges on . from ‘mjj’@’%’;
创建数据库
小提示:
创建数据库之前要先连接MySql服务器
命令:
create database 数据库名;
创建数据库并分配用户
CREATE DATABASE 数据库名;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON 数据库名.* TO 数据库名@localhost IDENTIFIED BY '密码';
SET PASSWORD FOR '数据库名'@'localhost' = OLD_PASSWORD('密码');
依次执行3个命令完成数据库创建。
显示数据库
命令:
show databases
注意:
为了不再显示的时候乱码,要修改数据库默认编码。
1、修改MYSQL的配置文件:my.ini里面修改default-character-set=gbk
2、代码运行时修改:
?.?
当前数据库
命令:
select database();
MySql中SELECT命令类似于python里的print,可以用它来显示一个字符串、数字等
连接数据库
命令:
use 数据库名;
提示:Database changed
use语句可以通告MySQLql把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的USE语句:
USE db1;
SELECT COUNT(*) FROM mytable;
# selects from db1.mytable
.
USE db2;
SELECT COUNT(*) FROM mytable;
# selects from db2.mytable
删除数据库
命令:
drop database 数据库名;
删除一个不确定存在的数据库
1.
mysql> drop database drop_database; ERROR 1008(HY000):Can’t
drop database ‘drop_database’; database doesn’t exist
#发生错误,不能删除’drop_database’数据库,该数据库不存在。
⬇
mysql> drop database if exists drop_database;
Query OK, 0 rows affected, 1 warning (0.00sec)
#产生一个警告说明此数据库不存在
2.
mysql> create database drop_database; Query OK, 1 row affected
(0.00 sec) mysql> drop database if exists drop_database;
#if exists判断数据库是否存在,不存在也不产生错误 Query OK, 0 rows affected (0.00 sec)
创建数据表
命令:
create table 表名 ( 字段名1 类型1 [,..字段名n 类型n]);
例如,建立一个名为MyClass的表:
字段名 | 数字类型 | 数据宽度 | 是否主键 | 是否为空 | 自动增加 | 默认值 |
---|---|---|---|---|---|---|
id | int | 4 | 否 | primary key | auto_increment | |
name | char | 20 | 否 | |||
sex | int | 4 | 否 | 0 | ||
degree | double | 16 | 是 |
create table MyClass(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex int(4) not null default '0',
degree double(16,2));
删除数据表
命令:
drop table 表名;
注意: DROP TABLE用于取消一个或多个表。必须有每个表的DROP权限,所有的表数据和表定义会被取消.
( 对于一个带分区的表,DROP TABLE会永久性地取消表定义,取消各分区,并取消储存在这些分区中的所有数据。DROP TABLE还会取消与被取消的表有关联的分区定义(.par)文件。
对与不存在的表,使用IF EXISTS用于防止错误发生。当使用IF EXISTS时,对于每个不存在的表,会生成一个NOTE。
RESTRICT和CASCADE可以使分区更容易。目前,RESTRICT和CASCADE不起作用。)
表插入数据
命令:
insert into 表名 [( 字段名1[,..字段名n ])] values ( 值1 )[, ( 值n )]
例:
往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为kinney的成绩为93.2, 编号为2 的名为Miss的成绩为79.5, 编号为3 的名为John的成绩为83.6。
insert into MyClass values(1,'kinney',93.2),(2,'Miss',79.5), (2,'John', 83.6);
注意:insert into每次只能向表中插入一条记录。
查询表中的数据
1.查询所有行
命令:
select 字段1,字段2... from 表名 where 表达式
例:
查看表 MyClass 中所有数据
select * from MyClass;
2.查询前几行数据
例:
查看表 MyClass 中前2行数据
select * from MyClass order by id limit 0,2;
小提示:
select一般配合where使用,查询更精确更复杂的数据
删除表中数据
命令:
delete from 表名 where 表达式
例:
删除表 MyClass中编号为1 的记录
delete from MyClass where id=1;
修改表中数据
命令:
update 表名 set 字段=新值,… where 条件
例:
update MyClass set name=’Mary’ where id=1;
小提示:
UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句,则更新所有的行。如果指定了ORDER
BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,限制可以被更新的行的数目。
增加字段
命令:
alter table 表名 add字段 类型 其他;
例:
在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
alter table MyClass add passtest int(4) default '0'
加索引
alter table 表名 add index 索引名 (字段名1[,字段名2 …]);
例:
alter table employee add index emp_name (name);
加主关键字的索引
alter table 表名 add primary key (字段名);
例:
alter table employee add primary key(id);
加唯一限制条件的索引
alter table 表名 add unique 索引名 (字段名);
例:
alter table employee add unique emp_name2(cardnumber);
删除某个索引
alter table 表名 drop index 索引名;
例:
alter table employee drop index emp_name;
增加字段
ALTER TABLE table_name ADD field_name field_type;
修改原字段名称及类型
ALTER TABLE table_name CHANGE` old_field_name new_field_name field_type;
删除字段
MySQL ALTER TABLE table_name DROP field_name;
修改表名
命令:
rename table 原表名 to 新表名;
例:
在表MyClass名字更改为YouClass
rename table MyClass to YouClass;
执行“RENAME”时,不能有任何锁定的表或活动的事务。同样也必须有对原初表的“ALTER”和“DROP”权限,以及对新表的“CREATE”和“INSERT”权限。
如果在多表更名中,MySql遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。
RENAME TABLE 在 MySql 3.23.23 中被加入
备份数据库
命令在DOS的[url=file://\mysql\bin]\mysql\bin[/url]目录下执行
导出整个数据库
导出文件默认是存在mysql\bin目录下
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u user_name -p123456 database_name > outfile_name.sql导出一个表
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u user_name -p database_name table_name > outfile_name.sql- .导出一个数据库结构
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table - 带语言参数导出
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql
例:
将1库备份到文件back_1中:
[root@test1 root]cd /home/data/mysql
[root@test1 mysql]mysqldump -u root -p --opt 1 > back_1
MySql中SELECT命令的特殊功能
显示MYSQL的版本
select version();
+———————–+
| version() |
+———————–+
| 6.0.4-alpha-community |
+———————–+
1 row in set (0.02 sec)
显示当前时间
select now();
+———————+
| now() |
+———————+
| 2009-09-15 22:35:32 |
+———————+
1 row in set (0.04 sec)
显示年月日
SELECT DAYOFMONTH(CURRENT_DATE);
+————————–+
| DAYOFMONTH(CURRENT_DATE) |
+————————–+
| 15 |
+————————–+
1 row in set (0.01 sec)
SELECT MONTH(CURRENT_DATE);
+———————+
| MONTH(CURRENT_DATE) |
+———————+
| 9 |
+———————+
1 row in set (0.00 sec)
SELECT YEAR(CURRENT_DATE);
+——————–+
| YEAR(CURRENT_DATE) |
+——————–+
| 2009 |
+——————–+
1 row in set (0.00 sec)
显示字符串
SELECT "welecome to my blog!";
+———————-+
| welecome to my blog! |
+———————-+
| welecome to my blog! |
+———————-+
1 row in set (0.00 sec)
当计算器用
select ((4 * 4) / 10 ) + 25;
+———————-+
| ((4 * 4) / 10 ) + 25 |
+———————-+
| 26.60 |
+———————-+
1 row in set (0.00 sec)
串接字符串
select CONCAT(f_name, " ", l_name)
AS Name
from employee_data
where title = ‘Marketing Executive’;
+—————+
| Name |
+—————+
| Monica Sehgal |
| Hal Simlai |
| Joseph Irvine |
+—————+
3 rows in set (0.00 sec)
注意:CONCAT()函数:把字符串连接起来。