MySQL由浅到更浅-Python基本操作

目录

说明

一、数据库建立

二、创建数据表

三、插入数据

四、查询数据

五、删除记录

六、更新数据

七、删除表

八、总结

 

说明

    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,其实都是十分相近,只要多了解,慢慢钻研细节的东西即可。

    博主很菜,上面只是写着仅仅自己没事记着玩的,小孩子别学坏。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值