• Python入门系列(十一)一篇搞定python操作MySQL数据库


    开始

    安装MySQL驱动

    $ python -m pip install mysql-connector-python
    

    测试MySQL连接器

    import mysql.connector
    

    测试MySQL连接

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword"
    )
    
    print(mydb)
    

    创建数据库

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("CREATE DATABASE mydatabase")
    

    创建表格

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")
    

    插入数据

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
    val = ("John", "Highway 21")
    mycursor.execute(sql, val)
    
    mydb.commit()
    
    print(mycursor.rowcount, "record inserted.")
    

    重要!。注意这个语句:mydb.commit()。它是进行修改的必要条件,否则就不会对表进行修改。

    插入多行

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
    val = [
      ('Peter', 'Lowstreet 4'),
      ('Amy', 'Apple st 652'),
      ('Hannah', 'Mountain 21'),
      ('Michael', 'Valley 345'),
      ('Sandy', 'Ocean blvd 2'),
      ('Betty', 'Green Grass 1'),
      ('Richard', 'Sky st 331'),
      ('Susan', 'One way 98'),
      ('Vicky', 'Yellow Garden 2'),
      ('Ben', 'Park Lane 38'),
      ('William', 'Central st 954'),
      ('Chuck', 'Main Road 989'),
      ('Viola', 'Sideway 1633')
    ]
    
    mycursor.executemany(sql, val)
    
    mydb.commit()
    
    print(mycursor.rowcount, "was inserted.")
    

    获取插入的ID

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
    val = ("Michelle", "Blue Village")
    mycursor.execute(sql, val)
    
    mydb.commit()
    
    print("1 record inserted, ID:", mycursor.lastrowid)
    

    查询

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT * FROM customers")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    从表格中选择

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT * FROM customers")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    注意:我们使用fetchall()方法,它从最后执行的语句中获取所有行。

    选择列

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT name, address FROM customers")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    如果只想查询一条数据,可以使用fetchone()方法。

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT * FROM customers")
    
    myresult = mycursor.fetchone()
    
    print(myresult)
    

    Where条件

    使用筛选器选择

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT * FROM customers WHERE address ='Park Lane 38'"
    
    mycursor.execute(sql)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    通配符

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT * FROM customers WHERE address LIKE '%way%'"
    
    mycursor.execute(sql)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    防止SQL注入

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT * FROM customers WHERE address = %s"
    adr = ("Yellow Garden 2", )
    
    mycursor.execute(sql, adr)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    Order By

    对结果进行排序

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT * FROM customers ORDER BY name"
    
    mycursor.execute(sql)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    使用DESC关键字对结果进行降序排序。

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT * FROM customers ORDER BY name DESC"
    
    mycursor.execute(sql)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    删除记录

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "DELETE FROM customers WHERE address = 'Mountain 21'"
    
    mycursor.execute(sql)
    
    mydb.commit()
    
    print(mycursor.rowcount, "record(s) deleted")
    

    防止SQL注入

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "DELETE FROM customers WHERE address = %s"
    adr = ("Yellow Garden 2", )
    
    mycursor.execute(sql, adr)
    
    mydb.commit()
    
    print(mycursor.rowcount, "record(s) deleted")
    

    删除表

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "DROP TABLE customers"
    
    mycursor.execute(sql)
    

    更新数据

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Valley 345'"
    
    mycursor.execute(sql)
    
    mydb.commit()
    
    print(mycursor.rowcount, "record(s) affected")
    

    防止SQL注入

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "UPDATE customers SET address = %s WHERE address = %s"
    val = ("Valley 345", "Canyon 123")
    
    mycursor.execute(sql, val)
    
    mydb.commit()
    
    print(mycursor.rowcount, "record(s) affected")
    

    限制结果

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT * FROM customers LIMIT 5")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    从另一个位置开始

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT * FROM customers LIMIT 5 OFFSET 2")
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    连接两张或更多数据表

    # users 表
    { id: 1, name: 'John', fav: 154},
    { id: 2, name: 'Peter', fav: 154},
    { id: 3, name: 'Amy', fav: 155},
    { id: 4, name: 'Hannah', fav:},
    { id: 5, name: 'Michael', fav:}
    
    # products
    { id: 154, name: 'Chocolate Heaven' },
    { id: 155, name: 'Tasty Lemons' },
    { id: 156, name: 'Vanilla Dreams' }
    
    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="localhost",
      user="yourusername",
      password="yourpassword",
      database="mydatabase"
    )
    
    mycursor = mydb.cursor()
    
    sql = "SELECT \
      users.name AS user, \
      products.name AS favorite \
      FROM users \
      INNER JOIN products ON users.fav = products.id"
    
    mycursor.execute(sql)
    
    myresult = mycursor.fetchall()
    
    for x in myresult:
      print(x)
    

    结束

    MySQL的基本操作就是这样子了。

    您的关注,是我的无限动力!

    公众号 @生活处处有BUG

  • 相关阅读:
    进程的优先级与LAMP项目部署实战
    vscode各种配置的方法
    你能猜出这是什么代码吗
    视觉检测系统可以检测太阳能电池片哪些方面的缺陷?
    常见编写JavaScript代码时容易出现的错误(3)
    为什么说网络安全是风口行业?是it行业最后的红利?
    深入理解java泛型
    不懂就学—什么是autoML?
    C++学习之list的实现
    文件改名:一键将文件名称改成跟目录名称一样
  • 原文地址:https://www.cnblogs.com/bugs-in-life/p/16663299.html