当前位置:   article > 正文

MySQL由浅到更浅-Python基本操作_mycursor.execute()

mycursor.execute()

目录

说明

一、数据库建立

二、创建数据表

三、插入数据

四、查询数据

五、删除记录

六、更新数据

七、删除表

八、总结

 

说明

    python3.7

    Ubuntu16.04

    mysql可视化工具MySQL-workbench

    mysql-connector库进行驱动

  1. #如果没有安装 可以按照以下命令安装
  2. python -m pip install mysql-connector

    以下步骤来源于菜鸟驿站的相关教程,进行了适当的个人修改

 

一、数据库建立

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456"
  6. )
  7. mycursor = mydb.cursor()
  8. mycursor.execute("CREATE DATABASE sam") #建立一个名为sam的数据库

    当然,建立完我们就可以打开MySQL-workbench,输入show databases,按下闪电符号,我们就可以在下方看到刚刚建立的那个名为sam的数据库

    所以,你会发现我们可以用show databases这条指令可以用来查看当然的数据库有哪些,当然这条命令还可以这么用

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456"
  6. )
  7. mycursor = mydb.cursor()
  8. mycursor.execute("SHOW DATABASES")
  9. for x in mycursor:
  10. print(x)

    所以我们运行可以看到结果和软件里是一样的

    所以你找到规律了吗?找不到就就就继续看以下。

 

二、创建数据表

    方法还是很简单,说到底就是命令改变     

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. #创建一个名为sites的数据表,其中的两个属性name和url的默认字符长度为255
  10. mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")

然后我们就可以在Workbench中看到

     同理我们使用

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost", # 数据库主机地址
  4. user="root", # 数据库用户名
  5. passwd="123456" ,# 数据库密码
  6. database='sam'
  7. )
  8. mycursor = mydb.cursor()
  9. mycursor.execute("SHOW TABLES")
  10. for x in mycursor:
  11. print(x)

    也能输出得到我们刚刚建立的数据库

    使用 "INT AUTO_INCREMENT PRIMARY KEY" 语句来创建一个主键,主键起始值为 1,逐步递增。

    相当于给每条数据一个ID

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

 

三、插入数据

    插入数据使用 "INSERT INTO" 语句,如果你看到这句话的时候觉得你已经知道怎么做了的话,那稳了

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost", # 数据库主机地址
  4. user="root", # 数据库用户名
  5. passwd="123456" ,# 数据库密码
  6. database='sam'
  7. )
  8. mycursor = mydb.cursor()
  9. #分析以下下面这句话,INSERT INTO是数据插入指令,sites是刚刚我们创建的数据表
  10. #然后我们要放入的数据对应的属性是name和url,他们的值为什么什么
  11. sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
  12. val = ("RUNOOB", "https://www.runoob.com")
  13. mycursor.execute(sql, val)
  14. mydb.commit() # 数据表内容有更新,必须使用到该语句
  15. print(mycursor.rowcount, "记录插入成功。")

    执行完查一下,如下图,选择sites表然后右键按下第一个

    你就会看到指令‘SELECT * FROM sam.sites;’,闪电执行后你就看到我们刚刚写入的

    实现一条数据的插入之后,我们这么大的野心,当然得多条数据一起插入才能满足

    批量插入使用 executemany() 方法,该方法的第二个参数是一个元组列表,包含了我们要插入的数据

    实践一下

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost", # 数据库主机地址
  4. user="root", # 数据库用户名
  5. passwd="xsx980427" ,# 数据库密码
  6. database='sam'
  7. )
  8. mycursor = mydb.cursor()
  9. sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
  10. val = [
  11. ('Google', 'https://www.google.com'),
  12. ('Github', 'https://www.github.com'),
  13. ('Taobao', 'https://www.taobao.com'),
  14. ('stackoverflow', 'https://www.stackoverflow.com/')
  15. ]
  16. mycursor.executemany(sql, val)
  17. mydb.commit() # 数据表内容有更新,必须使用到该语句
  18. print(mycursor.rowcount, "记录插入成功。")

    走!继续去Workbench软件看一下    

    然后现在就得来用一下刚刚设置的主键ID了,如果我们想在插入数据的时候顺带输出当前的ID,我们就可以知道现在的数据量了

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
  10. val = ("Zhihu", "https://www.zhihu.com")
  11. mycursor.execute(sql, val)
  12. mydb.commit()
  13. print("1 条记录已插入, ID:", mycursor.lastrowid)

 

四、查询数据

    查询数据使用 SELECT 语句

    首先,我们先看一下刚刚我们在查看我们插入的数据时,软件中给的命令是怎样的

    没错,这就是我们要用的命令哈哈哈

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. mycursor.execute("SELECT * FROM sites")
  10. myresult = mycursor.fetchall() # fetchall() 获取所有记录
  11. for x in myresult:
  12. print(x)

    得到如下结果(name,url,id)

    因为我们使用的命令“SELECT * FROM sites”中的“*”号代表的是找到所有属性的数据,我们更多并不是想所有属性都输出,只想要输出某一个属性,例如我们现在只想知道有哪些name

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost", # 数据库主机地址
  4. user="root", # 数据库用户名
  5. passwd="123456" ,# 数据库密码
  6. database='sam'
  7. )
  8. mycursor = mydb.cursor()
  9. mycursor.execute("SELECT name FROM sites")
  10. myresult = mycursor.fetchall()
  11. for x in myresult:
  12. print(x)

     可以得到

    可以发现我们用来寻找的方式是mycursor.fetchall(),这个函数代表找出每条数据

    那我们只想找出一条数据咋办

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. mycursor.execute("SELECT * FROM sites")
  10. myresult = mycursor.fetchone()
  11. print(myresult)

    输出如下

    那这样又有新问题了,我想查一些指定数据咋办,也就是怎么查询有条件限制的数据

    下面我们想看看哪些数据的网址会存在‘oo’,只查询这些,涉及到正则表达式

    这里用到了where 条件语句

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. # WHERE 是条件判断
  10. # 具体条件是 url的字符串符合'%oo%'【两个o且前后都有若干个其他】
  11. sql = "SELECT * FROM sites WHERE url LIKE '%oo%'"
  12. mycursor.execute(sql)
  13. myresult = mycursor.fetchall()
  14. for x in myresult:
  15. print(x)

    这里还涉及到一个SQL 注入的攻击问题,有兴趣自行了解

    现在我们有了新的想法,查询到的数据要是可以按某一个顺序输出就好了

    查询结果排序可以使用 ORDER BY 语句,默认的排序方式为升序,关键字为 ASC,如果要设置降序排序,可以设置关键字 DESC

  1. #按 name 字段字母的升序排序
  2. import mysql.connector
  3. mydb = mysql.connector.connect(
  4. host="localhost",
  5. user="root",
  6. passwd="123456",
  7. database="sam"
  8. )
  9. mycursor = mydb.cursor()
  10. sql = "SELECT * FROM sites ORDER BY name"
  11. mycursor.execute(sql)
  12. myresult = mycursor.fetchall()
  13. for x in myresult:
  14. print(x)

    最后我们就会想到要是查询的数据太多怎么办?一下子无数数据蹦出来不得卡死,要限制以下。那要是我觉得前100条数据看腻了,想看后100条咋办?没错就是不想看前100.

    第一个问题就需要加上数量限制条件,通过 "LIMIT" 语句来指定

    第二个问题就需要设置显示初始位置,通过 "OFFSET" 语句来指定

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. #限制我只想看3条 而且我要忽略前1条
  10. mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1")
  11. myresult = mycursor.fetchall()
  12. for x in myresult:
  13. print(x)

    看一下输出的ID我们就能知道第一条信息被忽略了

五、删除记录

    我们要删除某一条数据、某几条数据和上面查询的方法一样,条件+限制,如果啥都不做,那就是删除了一整张表的所有数据

    我们用到的命令是 DELETE FROM

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. sql = "DELETE FROM sites WHERE name = 'Google'"
  10. mycursor.execute(sql)
  11. mydb.commit()
  12. print(mycursor.rowcount, " 条记录删除")

六、更新数据

     我们用到的命令是 UPDATE

     实现功能:把我们表中数据中name为Taobao的数据中的name改为TB

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. sql = "UPDATE sites SET name = 'TB' WHERE name = 'Taobao'"
  10. mycursor.execute(sql)
  11. mydb.commit()
  12. print(mycursor.rowcount, " 条记录被修改")

七、删除表

    增删改查之后,就到是最终了结的时候了

    使用命令 DROP TABLE 可进行数据表的删除,最好加上 IF EXISTS 用于判断表是否存在,只有在存在的情况才删除

  1. import mysql.connector
  2. mydb = mysql.connector.connect(
  3. host="localhost",
  4. user="root",
  5. passwd="123456",
  6. database="sam"
  7. )
  8. mycursor = mydb.cursor()
  9. sql = "DROP TABLE IF EXISTS sites" # 删除数据表 sites
  10. mycursor.execute(sql)

 

八、总结

    这篇文章仅仅是MySQL最基本的操作,如果需要深入了解可以菜鸟教程-Mysql

    其实无论是MySQL还是像mongoDB,其实都是十分相近,只要多了解,慢慢钻研细节的东西即可。

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

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号