赞
踩
目录
python3.7
Ubuntu16.04
mysql可视化工具MySQL-workbench
mysql-connector库进行驱动
- #如果没有安装 可以按照以下命令安装
- python -m pip install mysql-connector
以下步骤来源于菜鸟驿站的相关教程,进行了适当的个人修改
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456"
- )
-
- mycursor = mydb.cursor()
-
- mycursor.execute("CREATE DATABASE sam") #建立一个名为sam的数据库
当然,建立完我们就可以打开MySQL-workbench,输入show databases,按下闪电符号,我们就可以在下方看到刚刚建立的那个名为sam的数据库
所以,你会发现我们可以用show databases这条指令可以用来查看当然的数据库有哪些,当然这条命令还可以这么用
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456"
- )
-
- mycursor = mydb.cursor()
-
- mycursor.execute("SHOW DATABASES")
-
- for x in mycursor:
- print(x)
所以我们运行可以看到结果和软件里是一样的
所以你找到规律了吗?找不到就就就继续看以下。
方法还是很简单,说到底就是命令改变
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- #创建一个名为sites的数据表,其中的两个属性name和url的默认字符长度为255
- mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
然后我们就可以在Workbench中看到
同理我们使用
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost", # 数据库主机地址
- user="root", # 数据库用户名
- passwd="123456" ,# 数据库密码
- database='sam'
- )
-
- mycursor = mydb.cursor()
-
- mycursor.execute("SHOW TABLES")
-
- for x in mycursor:
- print(x)
也能输出得到我们刚刚建立的数据库
使用 "INT AUTO_INCREMENT PRIMARY KEY" 语句来创建一个主键,主键起始值为 1,逐步递增。
相当于给每条数据一个ID
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
插入数据使用 "INSERT INTO" 语句,如果你看到这句话的时候觉得你已经知道怎么做了的话,那稳了
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost", # 数据库主机地址
- user="root", # 数据库用户名
- passwd="123456" ,# 数据库密码
- database='sam'
- )
- mycursor = mydb.cursor()
-
- #分析以下下面这句话,INSERT INTO是数据插入指令,sites是刚刚我们创建的数据表
- #然后我们要放入的数据对应的属性是name和url,他们的值为什么什么
- sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
- val = ("RUNOOB", "https://www.runoob.com")
- mycursor.execute(sql, val)
-
- mydb.commit() # 数据表内容有更新,必须使用到该语句
-
- print(mycursor.rowcount, "记录插入成功。")
执行完查一下,如下图,选择sites表然后右键按下第一个
你就会看到指令‘SELECT * FROM sam.sites;’,闪电执行后你就看到我们刚刚写入的
实现一条数据的插入之后,我们这么大的野心,当然得多条数据一起插入才能满足
批量插入使用 executemany() 方法,该方法的第二个参数是一个元组列表,包含了我们要插入的数据
实践一下
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost", # 数据库主机地址
- user="root", # 数据库用户名
- passwd="xsx980427" ,# 数据库密码
- database='sam'
- )
- mycursor = mydb.cursor()
-
- sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
- val = [
- ('Google', 'https://www.google.com'),
- ('Github', 'https://www.github.com'),
- ('Taobao', 'https://www.taobao.com'),
- ('stackoverflow', 'https://www.stackoverflow.com/')
- ]
-
- mycursor.executemany(sql, val)
-
- mydb.commit() # 数据表内容有更新,必须使用到该语句
-
- print(mycursor.rowcount, "记录插入成功。")
走!继续去Workbench软件看一下
然后现在就得来用一下刚刚设置的主键ID了,如果我们想在插入数据的时候顺带输出当前的ID,我们就可以知道现在的数据量了
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
- val = ("Zhihu", "https://www.zhihu.com")
- mycursor.execute(sql, val)
-
- mydb.commit()
-
- print("1 条记录已插入, ID:", mycursor.lastrowid)
查询数据使用 SELECT 语句
首先,我们先看一下刚刚我们在查看我们插入的数据时,软件中给的命令是怎样的
没错,这就是我们要用的命令哈哈哈
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- mycursor.execute("SELECT * FROM sites")
-
- myresult = mycursor.fetchall() # fetchall() 获取所有记录
-
- for x in myresult:
- print(x)
得到如下结果(name,url,id)
因为我们使用的命令“SELECT * FROM sites”中的“*”号代表的是找到所有属性的数据,我们更多并不是想所有属性都输出,只想要输出某一个属性,例如我们现在只想知道有哪些name
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost", # 数据库主机地址
- user="root", # 数据库用户名
- passwd="123456" ,# 数据库密码
- database='sam'
- )
-
-
- mycursor = mydb.cursor()
-
- mycursor.execute("SELECT name FROM sites")
-
- myresult = mycursor.fetchall()
-
- for x in myresult:
- print(x)
可以得到
可以发现我们用来寻找的方式是mycursor.fetchall(),这个函数代表找出每条数据
那我们只想找出一条数据咋办
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- mycursor.execute("SELECT * FROM sites")
-
- myresult = mycursor.fetchone()
-
- print(myresult)
输出如下
那这样又有新问题了,我想查一些指定数据咋办,也就是怎么查询有条件限制的数据
下面我们想看看哪些数据的网址会存在‘oo’,只查询这些,涉及到正则表达式
这里用到了where 条件语句
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- # WHERE 是条件判断
- # 具体条件是 url的字符串符合'%oo%'【两个o且前后都有若干个其他】
- sql = "SELECT * FROM sites WHERE url LIKE '%oo%'"
-
- mycursor.execute(sql)
-
- myresult = mycursor.fetchall()
-
- for x in myresult:
- print(x)
这里还涉及到一个SQL 注入的攻击问题,有兴趣自行了解
现在我们有了新的想法,查询到的数据要是可以按某一个顺序输出就好了
查询结果排序可以使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC。
- #按 name 字段字母的升序排序
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- sql = "SELECT * FROM sites ORDER BY name"
-
- mycursor.execute(sql)
-
- myresult = mycursor.fetchall()
-
- for x in myresult:
- print(x)
最后我们就会想到要是查询的数据太多怎么办?一下子无数数据蹦出来不得卡死,要限制以下。那要是我觉得前100条数据看腻了,想看后100条咋办?没错就是不想看前100.
第一个问题就需要加上数量限制条件,通过 "LIMIT" 语句来指定
第二个问题就需要设置显示初始位置,通过 "OFFSET" 语句来指定
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- #限制我只想看3条 而且我要忽略前1条
- mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1")
-
- myresult = mycursor.fetchall()
-
- for x in myresult:
- print(x)
看一下输出的ID我们就能知道第一条信息被忽略了
我们要删除某一条数据、某几条数据和上面查询的方法一样,条件+限制,如果啥都不做,那就是删除了一整张表的所有数据
我们用到的命令是 DELETE FROM
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- sql = "DELETE FROM sites WHERE name = 'Google'"
-
- mycursor.execute(sql)
-
- mydb.commit()
-
- print(mycursor.rowcount, " 条记录删除")
我们用到的命令是 UPDATE
实现功能:把我们表中数据中name为Taobao的数据中的name改为TB
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- sql = "UPDATE sites SET name = 'TB' WHERE name = 'Taobao'"
-
- mycursor.execute(sql)
-
- mydb.commit()
-
- print(mycursor.rowcount, " 条记录被修改")
增删改查之后,就到是最终了结的时候了
使用命令 DROP TABLE 可进行数据表的删除,最好加上 IF EXISTS 用于判断表是否存在,只有在存在的情况才删除
- import mysql.connector
-
- mydb = mysql.connector.connect(
- host="localhost",
- user="root",
- passwd="123456",
- database="sam"
- )
- mycursor = mydb.cursor()
-
- sql = "DROP TABLE IF EXISTS sites" # 删除数据表 sites
-
- mycursor.execute(sql)
这篇文章仅仅是MySQL最基本的操作,如果需要深入了解可以菜鸟教程-Mysql
其实无论是MySQL还是像mongoDB,其实都是十分相近,只要多了解,慢慢钻研细节的东西即可。
博主很菜,上面只是写着仅仅自己没事记着玩的,小孩子别学坏。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。