python MySql基本使用

自行百度安装完成

建议读者在使用的时候,提前设置好一定的规则,比如说,统一使用大写加数字或者统一使用小写加下划线。如果读者使用 Windows 系统,为了减少使用大小写切换的次数,哪怕你把命令写成小写也是没有关系的

MySQL 基础知识

创建数据库:

mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.09 sec)

从字面上理解即可,我们创建了一个名为 test 的数据库。

使用数据库:

mysql> USE test;
Database changed

在调用某个数据库的内容之前,你需要先使用 USE 命令来切换到这个数据库

删除数据库:

mysql> DROP DATABASE test;
Query OK, 0 rows affected (0.02 sec)

删除数据库的同时,数据库中的所有表和数据也会紧接着被从系统中移除,无论任何时候,错误使用这条命令都是很严重的。
有一点需要提醒读者,MySQL 中,命令以分号结尾,当你命令结束却没有使用分号可能会让你多行式输入命令:

mysql> DROP DATABASE test
 -> ;
Query OK, 0 rows affected (0.02 sec)

查看数据库:

mysql> SHOW DATABASES;

这句命令用来查看当前已经有的数据库,效果如下图所示,前四个数据库都是MySQL 默认存在的,如果你不了解的话,最好不要对他们做任何更改。如果读者想要和笔者的输出内容相同,那么读者需要再一次重复创建 test 数据库的过程。
在这里插入图片描述

创建表:
表在数据库中用单词 TABLE 来表示

扫描二维码关注公众号,回复: 6124512 查看本文章
mysql> CREATE TABLE user_info(log_in VARCHAR(10),id INT,password INT);
Query OK, 0 rows affected (0.17 sec)

在这个语句中,我们创建了一个有三个参数的表,第一个参数设置为不超过 10 个字符的字符串,第二个 user_id,pro_id 都设置为整形,即数字。
然后我们向其中加入信息:

INSERT INTO user_info VALUES("li_si",0,123456);

每一个参数都和刚才设置的参数多少相互对应。这里建议读者多插入几条数据,不仅是为了练习,更是为了方便我们后面的步骤的进行。

查看表:

mysql> SHOW TABLES;

查看数据:

SELECT * FROM user_info

效果如图所示:
在这里插入图片描述

这个命令有很多种用法,可以和其他的命令互相结合,比如说,读者想要实现条件化查询,比如说这几种查询方法:

#在 user_info 表中查询所有 id 小于 10 的账户
SELECT * FROM user_info WHERE id<10;
#在 user_info 表中查询所有密码等于 password 的账户
SELECT * FROM user_info WHERE password=123456;
#在 user_info 表中查询所有 log_in=li_si 的账户
SELECT * FROM user_info WHERE log_in="li_si";

WHERE 语句之后可以跟随任意我们设置的参数,然后对其进行比较,大于小于等于,
符合条件的数据会被返回。

表中数据更新:

mysql> UPDATE user_info SET id=1 WHERE id=0;
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0

这行语句的使用格式如下:
UPDATE [表名] SET [重设参数] WHERE [查询条件]还有其他不同的形式:

#设置 password=123456 的账户的用户名为 test
UPDATE user_info SET log_in="test" WHERE password=123456;
#将 id=1 的账户的密码设置为 123456
UPDATE user_info SET password=12345678 WHERE id=1;

删除行:

DELETE FROM user_info WHERE id=1;

DELETE 语句和 SELECT 语句很像,都可以使用 WHERE 语句进行条件化使用,但
DELETE 语句与之相比没有符号“*”。
另外如果读者你想要删除数据库中的所有数据,比如说,游戏中进行一个删档测试,
那么你会用到这个数据

DELETE FROM user_info;

删除表:
如果读者想要在删除所有数据的同时删除掉这个表,那么你可以直接使用删除表和其中的所有数据。

DROP TABLE user_info;

python + MySQL

在对 SQL 语句有着基本的理解之后,我们来实现 Python 和 MySQL 的交互,我们需要借助 pymysql 这个第三方库,你可以使用 pip 来安装:

pip install pymys

下面通过代码来展示怎样使用 pysql 来进行 MySQL 和 Python 的交互。

#导入模块
import pymysql
#连接数据库
conn=pymysql.connect(host='127.0.0.1', user='root', password='password', database='test', 
port=3306, charset='utf8')
cur=conn.cursor()
print("*****====================================*****")
# 使用 execute()方法执行 SQL 查询
# 使用 fetchone() 方法获取单条数据.
version="SELECT VERSION()"
cur.execute(version)
data = cur.fetchone()
print ("Database version : %s " % data)
print("*****====================================*****")
select="SELECT * FROM user_info"
exe_select=cur.execute(select)
#现在获取所有数据
all_data=cur.fetchall()
print(all_data)
#向下移动一行,绝对值从数据输出的上一行开始
#mode 默认值为相对
cur.scroll(1,mode='absolute')
data1=cur.fetchone()
print(data1)
#向上移动两行
#因为游标现在相当在输出所有数据的下一行
cur.scroll(-2,mode='relative')
data2=cur.fetchone()
print(data2)
# 关闭
cur.close()
# 关闭数据库连接
conn.close()

输出结果

Database version : 8.0.12
*****====================================*****
((‘li_si’, 0, 123456), (‘zhang_san’, 1, 12345678))
(‘zhang_san’, 1, 12345678)
(‘li_si’, 0, 123456)

pymysql.connect()这个语句参数比较多,我们来讲解一下这个命令的几个参数:
❑ host:连接的 mysql 主机,本机设置为’localhost’或者’127.0.0.1’
❑ port:连接的 mysql 主机的端口,默认是 3306
❑ db:需要连接的数据库的名称
❑ user:用户名
❑ password:密码
❑ charset:编码方式,默认是’gb2312’

cur=conn.cursor()

在这里插入图片描述
首先我们使用这条命令来连接并创建了一个游标或者一个类似于游标的对象,可以将游标理解成类似于这个东西

cur.execute()

execute()函数可以用来执行 SQL 语句

cur.scroll(1,mode='relative')

scroll()用来移动我们创建的游标,我们使用这条命令默认是相对模式的,如果你使用完一条命令后,那么游标是默认在所有输出的下一行,命令输入框上(所以我们第三次输出 scroll()命令的第一个参数为-2)。
当然,如果你想要使用绝对模式,那么读者可以指定需要 mode,当使用绝对模式的时候,光标在相当于从第一行的数据输出开始,大致在这个位置
在这里插入图片描述
Scroll()命令的第一个参数表示我们要移动的方向和大小,如果是正数,那么是游标向下移动,负数表示向上移动。
获取输出的有两个命令,分别是 fetchone()和 fetchall()这两个命令,fetchone()命令获取游标当前所在行的命令,而 fetchall 则获取所有输出的数据。

在最开始我们输出账户、密码、需要连接的数据库、端口来连接到数据,接着我们创建一个游标,然后执行 SQL 命令,获取数据,对所有数据进行查询并输出,因为游标的参数为绝对值的时候,默认是在数据输出的第一行,所以我们向下移动一行获取到的是第二
条张三的数据。然后我们进行第三次数据,从输出最后一行的下一行开始,再向上移动两行,获取到的是第一条数据。

再来看一看数据增加、删除、修改,因为这些操作涉及数据库的修改,很重要。所以MySQL 的执行机制跟 GIT 很像,需要我们在完成操作后再使用 commit()提交修改。
在这里插入图片描述
读者在使用的时候只需要在所有代码的最后使用 commit 提交一次即可,笔者这样子书写仅仅是因为习惯问题。

#导入库
import pymysql
#创建数据库
conn=pymysql.connect(host='localhost',port=3306,db='test',user='root',passwd='password',charset
='utf8')
cur=conn.cursor()
#查询原数据------------------------------------------------
select="SELECT * FROM user_info"
cur.execute(select)
all_data=cur.fetchall()
print(all_data)
print("*****====================================*****")
#插入数据
insert="INSERT INTO user_info VALUES('li_liu',2,123456789);"
count=cur.execute(insert)
conn.commit()
#输出插入后
select="SELECT * FROM user_info;"
cur.execute(select)
all_data=cur.fetchall()
print(all_data)
print("*****====================================*****")
#删除数据
delete='DELETE FROM user_info WHERE log_in="wang_wu";'
count=cur.execute(delete)
conn.commit()
#输出删除后
select="SELECT * FROM user_info;"
cur.execute(select)
all_data=cur.fetchall()
print(all_data)
print("*****====================================*****")
#更改
update='UPDATE user_info SET log_in="im changed" WHERE id=0;'
count=cur.execute(update)
conn.commit()
#输出更改后
select="SELECT * FROM user_info;"
cur.execute(select)
all_data=cur.fetchall()
print(all_data)
print("*****====================================*****")
#关闭
cur.close()
# 关闭数据库连接
conn.close()

输出的数据如

((‘li_si’, 0, 123456), (‘wang_wu’, 1, 12345678))
*****
((‘li_si’, 0, 123456), (‘wang_wu’, 1, 12345678), (‘li_liu’, 2, 123456789))
*****

((‘li_si’, 0, 123456), (‘li_liu’, 2, 123456789))
*****
((‘im changed’, 0, 123456), (‘li_liu’, 2, 123456789))
*****

我们第一次执行的 SQL 语句(查询语句不计算在内)向其中添加了李六(其实正确的顺序应该是张三李四王五赵六)的数据,然后对数据进行输出。第二条 SQL 语句,我们删除了王五的数据。然后第三条语句,我们修改了李四的 log_in 参数,li_si 被替换成了 im changed。
同样,pymysql 库还有一个可以让你返回的操作——rollback()命令,这条命令在你没有最终 commit 之前,一切操作都是可以回退的。

>>> import pymysql
>>> conn=pymysql.connect(host='localhost',port=3306,db='test',user='root',passwd='password',
charset='utf8')
>>> cur=conn.cursor()
>>> insert="INSERT INTO user_info VALUES('li_liu',2,123456789);"
>>> select="SELECT * FROM user_info"
>>> cur.execute(select)
2
>>> all_data=cur.fetchall()
>>> print(all_data)
(('im changed', 0, 123456), ('li_liu', 2, 123456789))
>>> cur.execute(insert)
1
>>> cur.execute(select)
3
>>> all_data=cur.fetchall()
>>> print(all_data)
(('im changed', 0, 123456), ('li_liu', 2, 123456789), ('li_liu', 2, 123456789))
>>> conn.rollback()
>>> cur.execute(select)
2
>>> all_data=cur.fetchall()
>>> print(all_data)
(('im changed', 0, 123456), ('li_liu', 2, 123456789))

笔者在 Python 的 IDLE 交互式环境下演示了 rollback()操作,初次执行查询语句,表中
只有两条数据,接着我们向其中插入一条数据,再次查询,表中已经变为三条数据,我们
执行 rollback()后,最后一次查询,返回的数据跟刚开始的数据一模一样

猜你喜欢

转载自blog.csdn.net/qq_38534107/article/details/89844019
今日推荐