跟我一起从零开始学python(四)数据库编程:MySQL数据库

news2024/11/15 11:06:12

前言

回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,今天到了数据库编程篇,前面没看的也不用往前翻,系列文已经整理好了:

1.跟我一起从零开始学python(一)编程语法必修
2.跟我一起从零开始学python(二)网络编程
3.跟我一起从零开始学python(三)多线程/多进程/协程

本篇讲:python数据库编程:MySQL数据库

在这里插入图片描述

本系列文根据以下学习路线展开讲述,由于内容较多,:

从零开始学python到高级进阶路线图

关注公众号:python技术训练营,学习进阶一步到位

适用于零基础学习和进阶人群的python资源:

① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单

下章讲:Redis数据库

一丶MySQL数据库

MySQL数据库

一丶MySQL基础

MySQL是一种关系型数据库管理系统,是目前最流行的开源数据库之一。Python可以通过MySQLdb、PyMySQL等模块来连接和操作MySQL数据库。

以下是Python连接MySQL数据库的基本步骤:

安装MySQLdb或PyMySQL模块

    pip install MySQLdb

    pip install PyMySQL

导入模块

    import MySQLdb

    import pymysql

连接数据库

    # MySQLdb模块
    conn = MySQLdb.connect(host='localhost', user='root', password='password', database='test', port=3306)
    
    # PyMySQL模块
    conn = pymysql.connect(host='localhost', user='root', password='password', database='test', port=3306)

创建游标对象

    cursor = conn.cursor()

执行SQL语句

    cursor.execute('SELECT * FROM table_name')

获取查询结果

    result = cursor.fetchall()

关闭游标和连接

    cursor.close()
    conn.close()

以上是Python连接MySQL数据库的基本步骤,具体操作可以根据实际需求进行调整。

2.在MySQL数据库中,常见的数据类型包括

  • 数值类型:包括整型、浮点型、双精度型等。

  • 字符串类型:包括定长字符串、变长字符串、文本类型等。

  • 日期和时间类型:包括日期、时间、日期时间等。

  • 布尔类型:包括真和假两种值。

  • 二进制类型:包括二进制数据、图像、音频等。

  • 枚举类型:包括一组预定义的值。

  • 集合类型:包括一组预定义的值,但可以选择多个。

在Python中,可以使用MySQLdb或pymysql等库来连接MySQL数据库,并使用SQL语句来创建、修改、查询和删除数据表。在创建数据表时,需要指定每个字段的数据类型,以确保数据的正确性和完整性。

3.在MySQL数据库中,约束是用于限制表中数据的规则。以下是MySQL中常用的约束

  • NOT NULL约束:该约束用于确保列中的值不为空。

  • UNIQUE约束:该约束用于确保列中的值是唯一的。

  • PRIMARY KEY约束:该约束用于将列设置为主键,确保每行数据都有唯一的标识符。

  • FOREIGN KEY约束:该约束用于确保列中的值与另一个表中的值匹配,通常用于建立表之间的关系。

  • CHECK约束:该约束用于确保列中的值符合指定的条件。

  • DEFAULT约束:该约束用于在插入新行时为列提供默认值。

例如,以下是一个包含约束的MySQL表的示例:

    CREATE TABLE students (
      id INT PRIMARY KEY,
      name VARCHAR(50) NOT NULL,
      age INT CHECK (age >= 18),
      email VARCHAR(50) UNIQUE,
      major_id INT,
      FOREIGN KEY (major_id) REFERENCES majors(id)
    );

在上面的示例中,id列被设置为主键,确保每行数据都有唯一的标识符。name列被设置为NOT NULL,确保该列中的值不为空。age列被设置为CHECK约束,确保该列中的值大于或等于18。email列被设置为UNIQUE约束,确保该列中的值是唯一的。major\_id列被设置为FOREIGN KEY约束,确保该列中的值与majors表中的id列匹配。

4.Python中操作MySQL数据库需要使用到MySQLdb或者pymysql等第三方库

下面介绍一些基本的数据库操作。

  • 连接数据库
    使用MySQLdb库连接数据库的代码如下:
    import MySQLdb
    
    # 打开数据库连接
    db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="test")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # 关闭数据库连接
    db.close()

使用pymysql库连接数据库的代码如下:

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", passwd="password", db="test")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # 关闭数据库连接
    db.close()
  • 创建表
    使用execute()方法执行SQL语句来创建表,例如:
    # 创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,
             SEX CHAR(1),
             INCOME FLOAT )"""
    
    cursor.execute(sql)
  • 插入数据
    使用execute()方法执行SQL语句来插入数据,例如:
    # 插入数据
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    
    cursor.execute(sql)
  • 查询数据
    使用execute()方法执行SQL语句来查询数据,例如:
    # 查询数据
    sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)
    cursor.execute(sql)
    results = cursor.fetchall()
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
  • 更新数据
    使用execute()方法执行SQL语句来更新数据,例如:
    # 更新数据
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    cursor.execute(sql)
  • 删除数据
    使用execute()方法执行SQL语句来删除数据,例如:
    # 删除数据
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    cursor.execute(sql)

5.在MySQL中,数据表是存储数据的基本单位
下面介绍一些常用的数据表操作。

  • 创建数据表
    创建数据表的语法如下:
    CREATE TABLE table_name (
       column1 datatype,
       column2 datatype,
       column3 datatype,
       .....
    );

其中,table\_name是要创建的数据表的名称,column1、column2、column3等是数据表中的列名,datatype是列的数据类型。

例如,创建一个名为students的数据表,包含id、name、age三个列,数据类型分别为int、varchar(20)、int,可以使用以下语句:

    CREATE TABLE students (
       id int,
       name varchar(20),
       age int
    );
  • 插入数据
    插入数据的语法如下:
    INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

其中,table\_name是要插入数据的数据表的名称,column1、column2、column3等是数据表中的列名,value1、value2、value3等是要插入的数据。

例如,向students数据表中插入一条数据,id为1,name为"Tom",age为18,可以使用以下语句:

    INSERT INTO students (id, name, age) VALUES (1, 'Tom', 18);
  • 查询数据
    查询数据的语法如下:
    SELECT column1, column2, column3, ... FROM table_name WHERE condition;

其中,table\_name是要查询数据的数据表的名称,column1、column2、column3等是要查询的列名,condition是查询条件。

例如,查询students数据表中所有数据,可以使用以下语句:

    SELECT * FROM students;
  • 更新数据
    更新数据的语法如下:
    UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

其中,table\_name是要更新数据的数据表的名称,column1、column2等是要更新的列名,value1、value2等是要更新的值,condition是更新条件。

例如,将students数据表中id为1的记录的age更新为20,可以使用以下语句:

    UPDATE students SET age = 20 WHERE id = 1;
  • 删除数据
    删除数据的语法如下:
    DELETE FROM table_name WHERE condition;

其中,table\_name是要删除数据的数据表的名称,condition是删除条件。

例如,删除students数据表中id为1的记录,可以使用以下语句:

    DELETE FROM students WHERE id = 1;
  • 删除数据表
    删除数据表的语法如下:
    DROP TABLE table_name;

其中,table\_name是要删除的数据表的名称。

例如,删除students数据表,可以使用以下语句:

    DROP TABLE students;

6.Python操作MySQL数据库的增删改查基础操作如下

  • 连接数据库
    使用Python中的pymysql库连接MySQL数据库,示例代码如下:
    import pymysql

    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # 关闭数据库连接
    db.close()
  • 创建数据表
    使用Python中的pymysql库创建MySQL数据库中的数据表,示例代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # 创建数据表SQL语句
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
    
    # 执行SQL语句
    cursor.execute(sql)
    
    # 关闭数据库连接
    db.close()
  • 插入数据
    使用Python中的pymysql库向MySQL数据库中的数据表插入数据,示例代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    
    # 执行SQL语句
    cursor.execute(sql)
    
    # 提交到数据库执行
    db.commit()
    
    # 关闭数据库连接
    db.close()
  • 查询数据
    使用Python中的pymysql库从MySQL数据库中的数据表查询数据,示例代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE \
           WHERE INCOME > %s" % (1000)
    
    # 执行SQL语句
    cursor.execute(sql)
    
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        # 打印结果
        print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
    
    # 关闭数据库连接
    db.close()
  • 更新数据
    使用Python中的pymysql库更新MySQL数据库中的数据表数据,示例代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    
    # 执行SQL语句
    cursor.execute(sql)
    
    # 提交到数据库执行
    db.commit()
    
    # 关闭数据库连接
    db.close()
  • 删除数据
    使用Python中的pymysql库删除MySQL数据库中的数据表数据,示例代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    
    # 执行SQL语句
    cursor.execute(sql)
    
    # 提交到数据库执行
    db.commit()
    
    # 关闭数据库连接
    db.close()

二丶MySQL进阶查询

1.创建数据库,数据表

  • 创建数据库:

使用Python连接MySQL数据库,可以使用mysql.connector模块,示例代码如下:

    import mysql.connector
    
    # 连接MySQL数据库
    mydb = mysql.connector.connect(
      host="localhost",
      user="root",
      password="123456"
    )
    
    # 创建数据库
    mycursor = mydb.cursor()
    mycursor.execute("CREATE DATABASE mydatabase")
  • 创建数据表:

使用Python连接MySQL数据库,可以使用mysql.connector模块,示例代码如下:

    import mysql.connector
    
    # 连接MySQL数据库
    mydb = mysql.connector.connect(
      host="localhost",
      user="root",
      password="123456",
      database="mydatabase"
    )
    
    # 创建数据表
    mycursor = mydb.cursor()
    mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")

以上代码创建了一个名为customers的数据表,包含两个字段nameaddress,类型均为VARCHAR(255)

2.条件查询

条件查询是指根据一定的条件筛选出符合要求的数据,常用的条件查询语句有WHERE、AND、OR、IN、BETWEEN等。

  • WHERE语句
    WHERE语句用于指定查询条件,语法如下:
    SELECT column1, column2, ... FROM table_name WHERE condition;

其中,condition是查询条件,可以使用比较运算符(=、<、>、<=、>=、<>)、逻辑运算符(AND、OR、NOT)和通配符(%、_)等。

例如,查询年龄大于等于18岁的学生信息:

    SELECT * FROM students WHERE age >= 18;
  • AND语句
    AND语句用于同时满足多个条件,语法如下:
    SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND ...;

例如,查询年龄大于等于18岁且性别为女的学生信息:

SELECT * FROM students WHERE age >= 18 AND gender = '女';
  • OR语句
    OR语句用于满足多个条件中的任意一个,语法如下:
    SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR ...;

例如,查询年龄大于等于18岁或性别为女的学生信息:

    SELECT * FROM students WHERE age >= 18 OR gender = '女';
  • IN语句
    IN语句用于指定多个值,语法如下:
    SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2, ...);

例如,查询学号为1001、1002、1003的学生信息:

    SELECT * FROM students WHERE id IN (1001, 1002, 1003);
  • BETWEEN语句
    BETWEEN语句用于指定一个范围,语法如下:
    SELECT column1, column2, ... FROM table_name WHERE column_name BETWEEN value1 AND value2;

例如,查询年龄在18岁到20岁之间的学生信息:

    SELECT * FROM students WHERE age BETWEEN 18 AND 20;

以上就是条件查询的基本语法,可以根据实际需求灵活运用。

3.在MySQL中,可以使用ORDER BY子句对查询结果进行排序

ORDER BY子句可以跟一个或多个列名,用逗号分隔。默认情况下,排序是升序的,可以使用DESC关键字进行降序排序。

例如,以下语句将按照age列进行升序排序:

    SELECT * FROM students ORDER BY age;

以下语句将按照age列进行降序排序:

    SELECT * FROM students ORDER BY age DESC;

可以同时指定多个列进行排序,例如:

    SELECT * FROM students ORDER BY grade DESC, age;

以上语句将先按照grade列进行降序排序,如果有相同的grade值,则按照age列进行升序排序。

注意,ORDER BY子句应该放在查询语句的最后面。

4.在MySQL中,分组是一种将数据按照某个字段进行分类的操作

分组可以用于统计数据、计算平均值、最大值、最小值等聚合函数的值。

下面是一个简单的例子,假设我们有一个学生表,包含学生的姓名、年龄和成绩:

    CREATE TABLE students (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(50),
        age INT,
        score INT
    );
    
    INSERT INTO students (name, age, score) VALUES
        ('Tom', 18, 90),
        ('Jerry', 19, 80),
        ('Lucy', 18, 95),
        ('Lily', 20, 85),
        ('Bob', 19, 75);

现在我们想要按照年龄分组,统计每个年龄段的平均成绩和最高成绩,可以使用如下的SQL语句:

    SELECT age, AVG(score) AS avg_score, MAX(score) AS max_score
    FROM students
    GROUP BY age;

执行结果如下:

    +-----+-----------+----------+
    | age | avg_score | max_score |
    +-----+-----------+----------+
    |  18 | 92.5000   |       95 |
    |  19 | 77.5000   |       80 |
    |  20 | 85.0000   |       85 |
    +-----+-----------+----------+

可以看到,我们按照年龄分组,统计了每个年龄段的平均成绩和最高成绩。

在分组查询中,我们还可以使用HAVING子句来过滤分组后的数据。例如,我们想要找出平均成绩大于85分的年龄段,可以使用如下的SQL语句:

    SELECT age, AVG(score) AS avg_score
    FROM students
    GROUP BY age
    HAVING avg_score > 85;

执行结果如下:

    +-----+-----------+
    | age | avg_score |
    +-----+-----------+
    |  18 | 92.5000   |
    |  20 | 85.0000   |
    +-----+-----------+

可以看到,我们只保留了平均成绩大于85分的年龄段。

三丶MySQL高级应用

1.视图

在MySQL中,视图是一种虚拟的表,它是由一个或多个基本表的查询结果组成的。视图并不存储数据,而是根据查询语句动态生成结果集。视图可以简化复杂的查询操作,提高查询效率,同时也可以保护数据的安全性。

创建视图的语法如下:

    CREATE VIEW view_name AS
    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;

其中,view_name是视图的名称,column1, column2, ...是要查询的列名,table_name是要查询的表名,condition是查询条件。

例如,我们可以创建一个名为employee_view的视图,查询employee表中的idnamesalary列:

    CREATE VIEW employee_view AS
    SELECT id, name, salary
    FROM employee;

查询视图的语法与查询表的语法类似:

    SELECT * FROM view_name;

例如,我们可以查询employee_view视图的结果:

    SELECT * FROM employee_view;

视图也可以进行更新操作,但是需要满足一定的条件。具体来说,视图可以进行以下类型的更新操作:

  • 对单表视图进行更新,即只涉及一个基本表的视图。
  • 对多表视图进行更新,但是更新操作只能涉及一个基本表的某些列,且这些列必须是唯一的。
    更新视图的语法如下:
    UPDATE view_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;

例如,我们可以更新employee_view视图中id为1的员工的薪水:

    UPDATE employee_view
    SET salary = 5000
    WHERE id = 1;

需要注意的是,更新视图时,实际上是更新了基本表中的数据,而不是视图本身。因此,更新视图时需要满足基本表的约束条件,否则会更新失败。

除了更新操作,视图还可以进行插入和删除操作,具体语法与表的操作类似。但是需要注意的是,插入和删除操作只能涉及一个基本表,且必须满足基本表的约束条件。

2.事务

事务是指一组操作,这些操作要么全部执行成功,要么全部不执行。在 MySQL 中,事务是通过 ACID 属性来保证数据的一致性和可靠性的。

ACID 是指:

  • 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部不执行。
  • 一致性(Consistency):事务执行前后,数据的完整性和约束条件不变。
  • 隔离性(Isolation):事务之间是相互隔离的,一个事务的执行不会影响其他事务的执行。
  • 持久性(Durability):事务一旦提交,对数据的修改就是永久性的,即使系统崩溃也不会丢失。

在 MySQL 中,使用 BEGIN、COMMIT 和 ROLLBACK 语句来控制事务的提交和回滚。

  • BEGIN:开始一个事务。
  • COMMIT:提交一个事务,将事务中的所有操作永久保存到数据库中。
  • ROLLBACK:回滚一个事务,将事务中的所有操作撤销。
    下面是一个使用事务的示例:
    import mysql.connector
    
    # 连接数据库
    mydb = mysql.connector.connect(
      host="localhost",
      user="root",
      password="123456",
      database="mydatabase"
    )
    
    # 获取游标
    mycursor = mydb.cursor()
    
    # 开始事务
    mycursor.execute("START TRANSACTION")
    
    # 执行操作
    try:
      sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
      val = ("John", "Highway 21")
      mycursor.execute(sql, val)
    
      sql = "UPDATE customers SET address = 'Park Lane 38' WHERE address = 'Highway 21'"
      mycursor.execute(sql)
    
      # 提交事务
      mydb.commit()
    
    except:
      # 回滚事务
      mydb.rollback()
    
    # 关闭连接
    mydb.close()

在上面的示例中,我们使用了 START TRANSACTION 开始一个事务,然后执行了两个操作:插入一条数据和更新一条数据。如果两个操作都执行成功,就使用 COMMIT 提交事务,否则就使用 ROLLBACK 回滚事务。

3.pyMySQL的使用

pyMySQL是Python中一个用于连接MySQL数据库的第三方库,它提供了一些简单易用的API,可以方便地进行数据库操作。

  • 安装pyMySQL:

可以使用pip命令进行安装:

    pip install pymysql
  • 连接MySQL数据库:

在使用pyMySQL之前,需要先连接到MySQL数据库。连接MySQL数据库需要指定主机名、用户名、密码、数据库名等信息。可以使用以下代码进行连接:

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="password", database="test")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # 关闭数据库连接
    db.close()

其中,host表示主机名,user表示用户名,password表示密码,database表示要连接的数据库名。

  • 执行SQL语句:

连接到MySQL数据库后,可以使用cursor对象执行SQL语句。pyMySQL支持执行所有的SQL语句,包括查询、插入、更新、删除等操作。以下是一个查询操作的示例:

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect(host="localhost", user="root", password="password", database="test")
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # 执行SQL语句
    sql = "SELECT * FROM students"
    cursor.execute(sql)
    
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        id = row[0]
        name = row[1]
        age = row[2]
        gender = row[3]
        print("id=%d,name=%s,age=%d,gender=%s" % (id, name, age, gender))
    
    # 关闭数据库连接
    db.close()

在执行SQL语句之前,需要先使用cursor()方法获取操作游标。执行SQL语句可以使用execute()方法,该方法接受一个SQL语句作为参数。查询操作可以使用fetchall()方法获取所有记录列表,然后遍历每一条记录。

插入、更新、删除操作也可以使用execute()方法,只需要将对应的SQL语句作为参数传入即可。

以上是pyMySQL的基本使用方法,更多详细的API可以参考官方文档。

四丶MySQL ORM框架-SQLAIchemy

SQLAlchemy是一个Python SQL工具包和ORM框架,它提供了一组广泛的工具,使得在Python中使用SQL更加容易和灵活。SQLAlchemy的主要目标是为SQL数据库提供高效、高性能的访问,并支持多种关系型数据库,如MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。

SQLAlchemy的ORM框架提供了一种将Python对象映射到关系型数据库表的方法,使得开发人员可以使用Python语言来操作数据库,而不必直接使用SQL语言。ORM框架可以自动创建数据库表、插入数据、更新数据、删除数据等操作,同时还支持事务、连接池、缓存等高级功能。

下面是一个使用SQLAlchemy ORM框架的示例:

    from sqlalchemy import create_engine, Column, Integer, String
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建数据库连接
    engine = create_engine('mysql+pymysql://username:password@host:port/database')
    
    # 创建Session类
    Session = sessionmaker(bind=engine)
    
    # 创建Base类
    Base = declarative_base()
    
    # 定义User类
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(String(50))
        age = Column(Integer)
    
    # 创建表
    Base.metadata.create_all(engine)
    
    # 创建Session实例
    session = Session()
    
    # 插入数据
    user = User(name='Tom', age=20)
    session.add(user)
    session.commit()
    
    # 查询数据
    users = session.query(User).all()
    for user in users:
        print(user.name, user.age)
    
    # 更新数据
    user = session.query(User).filter_by(name='Tom').first()
    user.age = 21
    session.commit()
    
    # 删除数据
    user = session.query(User).filter_by(name='Tom').first()
    session.delete(user)
    session.commit()
    
    # 关闭Session
    session.close()

在上面的示例中,我们首先创建了一个数据库连接,然后创建了一个Session类和一个Base类。Session类用于创建Session实例,Base类用于定义ORM映射关系。我们定义了一个User类,它继承自Base类,并定义了表名和字段。然后我们使用Base.metadata.create_all()方法创建了表。接着我们创建了一个Session实例,并使用session.add()方法插入了一条数据。使用session.query()方法查询数据,并使用session.commit()方法提交事务。我们还演示了如何更新和删除数据,最后使用session.close()方法关闭Session

SQLAlchemy ORM框架提供了丰富的功能和灵活的配置选项,可以满足各种不同的需求。同时,它也有一定的学习曲线,需要花费一些时间来学习和掌握。

1.使用SQLAlchemy查询MySQL数据库的示例

首先,需要安装SQLAlchemy库:

    pip install sqlalchemy

然后,连接MySQL数据库:

    from sqlalchemy import create_engine

    # 连接MySQL数据库
    engine = create_engine('mysql+pymysql://username:password@host:port/database')

其中,usernamepassword是MySQL数据库的用户名和密码,host是MySQL数据库的主机名,port是MySQL数据库的端口号,database是要连接的数据库名。

接下来,定义一个ORM模型:

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    
    # 定义ORM模型
    Base = declarative_base()
    
    class User(Base):
        __tablename__ = 'users'
    
        id = Column(Integer, primary_key=True)
        name = Column(String(50))
        age = Column(Integer)

这个ORM模型对应MySQL数据库中的users表,包含idnameage三个字段。

接下来,使用SQLAlchemy查询数据:

    from sqlalchemy.orm import sessionmaker
    
    # 创建Session
    Session = sessionmaker(bind=engine)
    session = Session()
    
    # 查询所有用户
    users = session.query(User).all()
    for user in users:
        print(user.id, user.name, user.age)
    
    # 查询年龄大于等于18岁的用户
    users = session.query(User).filter(User.age >= 18).all()
    for user in users:
        print(user.id, user.name, user.age)
    
    # 查询年龄大于等于18岁的用户,并按照年龄从小到大排序
    users = session.query(User).filter(User.age >= 18).order_by(User.age).all()
    for user in users:
        print(user.id, user.name, user.age)

以上代码分别查询了所有用户、年龄大于等于18岁的用户、年龄大于等于18岁的用户并按照年龄从小到大排序的结果,并打印出来。

除了以上示例,SQLAlchemy还支持更多的查询方式,如分页查询、聚合查询等。

以上就是关于python数据库编程MySQL数据库的内容分析

本系列文根据以下学习路线展开讲述,由于内容较多,:

从零开始学python到高级进阶路线图

关注公众号:python技术训练营,学习进阶一步到位

适用于零基础学习和进阶人群的python资源:

① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单

下章讲:Redis数据库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/735289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索MySQL的秘密宝藏:寻找隐藏的金币数据!(面试)

目录 ✨前言 &#x1f6b6;‍♂️正片开始 一、常见MySQL面试题通关详解 二、SQL面试题实战 1. 某外卖公司的用户订单表面试题 2. 学生管理系统表面试题 &#x1f44b;尾记 前言 在一个神秘的岛屿上&#xff0c;有一个被称为"数据库之塔"的巨大建筑。据传说&a…

Kubernetes Pod卷 - Pod镜像的升级和回滚 - 探针

目录 扩展&#xff1a; Pod创建的拓扑图&#xff1a; 提出的问题&#xff1a; Pod 卷的使用&#xff1a;Pod的数据持久化问题 配置 Pod 以使用卷进行存储 参考文档&#xff1a;配置 Pod 以使用卷进行存储 | Kubernetes 有状态应用和无状态应用&#xff1a; Pod 配置卷 1…

122.将实战网页部署到Netlify

● 本章我们将网站部署到Netlify ● 首先先点击右上角注册一个账号 ● 注册完成之后&#xff0c;点击sites&#xff0c;将我们的网站文件夹拖入 ● 上传成功 ● 之后就可以正常访问啦 ● 我们也可以修改我们的站点名称&#xff0c;让他更加好记

1、简述MySQL体系结构。2、安装部署MySQL。(使用yum以及通用二进制方式)。

Mysql是由SQL接口&#xff0c;解析器&#xff0c;优化器&#xff0c;缓存&#xff0c;存储引擎组成的 Connectors指的是不同语言中与SQL的交互 Management Serveices & Utilities&#xff1a; 系统管理和控制工具 Connection Pool&#xff1a;连接池。管理缓冲用户连…

JAVA_WEB 学生信息管理系统(WEB端)

仓库地址&#xff1a;https://gitee.com/ThMyGitee/Stuednt.git CSDN的友友们&#xff0c;项目如果适合您的话&#xff0c;麻烦给个小小的Star&#xff0c;谢谢啦&#xff01; JAVA_WEB 学生信息管理系统(WEB端) 1.开发环境 JDK1.8 Tomcat 8.5.60 IDEA 2019.3 MySQL 5.7.20…

算法学习day22

235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&…

洞察顾客需求,探究问卷调查在餐饮行业的赋能之路!

在餐饮行业中&#xff0c;顾客的口碑占据非常重要的地位&#xff0c;直接影响着门店的销售额。好口碑能一传十、十传百&#xff0c;为门店带来持续不断的流量和收益。所以&#xff0c;在顾客体验这一块&#xff0c;餐饮门店要尤为重视。 某餐饮品牌作为全球知名品牌&#xff0c…

精选6种制作竞赛动图的方法,推荐收藏!

下面的两个动图&#xff0c;就是条形竞赛图和折线竞赛图。 今天我们就来看看都有哪些方便的方法来制作呢 技术交流 技术要学会分享、交流&#xff0c;不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。 本文文章由粉丝的分享、推荐&#xff0c;资料干货、资料分享、…

牛客小白月赛75 DE

D 矩阵 登录—专业IT笔试面试备考平台_牛客网 思路&#xff1a;我们能够发现每个点最多只用两种状态&#xff0c;一种是不变&#xff0c;另一种是改变&#xff0c;如果相邻的点与当前点不相同&#xff0c;则可以花费一个单位走过去&#xff0c;否则需要先改变它的状态&#x…

7.4 实战图书详情相关接口(管理员端)

文章目录 前言一、需求二、Service层2.1 图书详情 - 基本信息接口BookDetailBOBookServiceBookServiceImpl 2.2 图书详情 - 图书评论接口BookCommentBOStudentBOBookCommentServiceBookCommentServiceImpl 三、Web层BookAdminController 四、PostMan测试最后 前言 在前面的API…

深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)

文章目录 一、相关实际问题二、socket的直接创建三、内核和用户进程协作之阻塞方式1&#xff09;等待接收消息2&#xff09;软中断模块3&#xff09;同步队列阻塞总结 在上一部分中讲述了网络包是如何从网卡送到协议栈的&#xff08;详见深入理解Linux网络——内核是如何接收到…

pycharm连接mysql数据库

点击右侧数据库&#xff0c;点击加号新建&#xff0c;选择数据源&#xff0c;选择mysql 输入数据库相关信息&#xff0c;可以先点击测试连接看能不能连接上&#xff0c; 如果驱动没下载会提示&#xff0c;需要下载驱动&#xff0c;直接点击下载安装即可 测试连接成功 勾选要显示…

LVS +Keepalived高可用群集

文章目录 一、Keepalived概述二、Keepalived服务重要功能1.管理 LVS 负载均衡软件2.支持故障自动切换&#xff08;Failover&#xff09;3.实现 LVS 集群中节点的健康检查&#xff08;Health Checking&#xff09;4.VRRP通信原理 三、keepalived体系主要模块及作用四、keepalive…

docker安装fastdfs(1个tracker、2个storage)

文章目录 1 拉取镜像2 构建tracker容器2.1 创建配置文件和数据文件路径&#xff08;只在主机上创建&#xff09;2.2 在官网下载了原装tracker.conf&#xff0c;修改了一个参数最大并发连接数&#xff0c;max_connections&#xff1a;改为1024&#xff08;默认256&#xff09;2.…

Leetcode-每日一题【2130.链表最大孪生和】

题目 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n-1-i) 个节点 。 比方说&#xff0c;n 4 那么节点 0 是节点 3 的孪生节点&#xff0c;节点 1 …

线性回归算法

什么是线性回归&#xff1f; 线性回归&#xff08;Linear regression&#xff09;是一种利用线性函数对自变量&#xff08;特征&#xff09;和因变量之间的关系进行建模的方法。线性回归是机器学习中一种广泛使用的基本回归算法。含有有多个特征的线性回归称为多元线性回归。 …

雅思词汇怎样在短期内进行突破?

雅思的考试对词汇量的要求是比较高的&#xff0c;那么该怎样才能高效的积累呢&#xff1f;和小编一起来看看雅思词汇怎样在短期内进行突破&#xff1f; 词汇突破 1&#xff09;制定合理的计划&#xff0c;反复循环 背单词是一个非常繁重的任务&#xff0c;它需要大量的精力。…

【记录】gnuplot|gnuplot怎么把多个图画成一个?

版本&#xff1a;gnuplot 5.2 patchlevel 2 解决了无数次了还是反复忘&#xff0c;气&#xff0c;遂记。 下列程序的功能&#xff1a; 读取文件夹下的所有dat文件&#xff0c;并把所有dat的结果画在一张图里并标好图例&#xff1a; set term png set output "output.png…

ElasticSearch 总结

ElasticSearch 1. 什么是RestFul REST : 表现层状态转化(Representational State Transfer)&#xff0c;如果一个架构符合REST原则&#xff0c;就称它为 RESTful 架构风格。 资源: 所谓"资源"&#xff0c;就是网络上的一个实体&#xff0c;或者说是网络上的一个具…

【简单认识Haproxy搭建Web群集】

文章目录 Haproxy概念1、简介2、HAProxy的主要特性3、HAProxy常见负载均衡策略4、LVS、Nginx、HAproxy的区别&#xff1a; 部署实例1.节点服务器部署2.部署Haproxy服务器3、日志定义 Haproxy概念 1、简介 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&…