数据库PyMySQL和ORM

本文介绍ORM框架原理,探讨其如何简化数据库操作,并详细讲解在Django中配置PyMySQL,实现数据库与模型类的映射过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库和ORM

前言

ORM框架

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

  • 类(class) -> 数据库的表(table)
  • 对象(object)–> 记录(record,行数据)
  • 对象的属性(attribute)–> 字段(field)

ORM作用
在这里插入图片描述

第一章 配置数据库PyMySQL

在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。

1.1 安装PyMySQL

pip install PyMySQL

1.2 在Django的工程同名子目录的__init__.py文件中添加如下语句(demo/demo/init.py)

from pymysql import install_as_MySQLdb
install_as_MySQLdb()

作用是让Django的ORM能以mysqldb的方式来调用PyMySQL

1.3 修改settings.py中DATABASES配置信息

   DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.mysql',
           'HOST': '127.0.0.1',  # 数据库主机
           'PORT': 3306,  # 数据库端口
           'USER': 'root',  # 数据库用户名
           'PASSWORD': 'mysql',  # 数据库用户密码
           'NAME': 'django_demo'  # 数据库名字
       }
   }

1.4 在MySQL中创建数据库

create database django_demo default charset=utf8;

第二章 定义模型类

  • 模型类被定义在"应用/models.py"文件中。
  • 模型类必须继承自Model类,位于包django.db.models中。

接下来首先以"图书"管理为例进行演示。

2.1 定义

创建应用booktest,在models.py 文件中定义模型类。

from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=128, verbose_name='名称')
    author = models.CharField(max_length=64,verbose_name='作者')
    bread = models.IntegerField(default=0, verbose_name='阅读量')

    class Meta:
        db_table = 'tb_books'  # 指明数据库表名

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.btitle

 2.1.1 数据库表名

  • 模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。
  • 可通过db_table 指明数据库表名。

 2.1.2 关于主键

  • django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
  • 默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

 2.1.3 属性命名限制

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

属性=models.字段类型(选项)

 2.1.4 字段

字段类型说明
AutoField自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
BooleanField布尔字段,值为True或False
CharField字符串,参数max_length表示最大字符个数
TextField大文本字段,一般超过4000个字符时使用
IntegerField整数
DecimalField十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数
FloatField浮点数
DateTimeField日期时间

2.2 迁移

将模型类同步到数据库中。

 2.2.1 生成迁移文件

python manage.py makemigrations

 2.2.2 同步到数据库中

python manage.py migrate

### 回答1: 您可以使用 Flask-SQLAlchemy 扩展来使用 ORM。首先,您需要安装 Flask-SQLAlchemy pymysql: ``` pip install Flask-SQLAlchemy pip install pymysql ``` 然后,在 Flask 应用程序中配置数据库连接: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@host/dbname' db = SQLAlchemy(app) ``` 其中,`username`、`password`、`host` `dbname` 分别是您的 MySQL 数据库的用户名、密码、主机名数据库名。 接下来,您可以定义模型类来映射数据库表: ```python class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) email = db.Column(db.String(120), unique=True) def __repr__(self): return '<User %r>' % self.name ``` 最后,您可以使用 ORM 操作数据库: ```python # 创建表 db.create_all() # 添加数据 user = User(name='John', email='john@example.com') db.session.add(user) db.session.commit() # 查询数据 users = User.query.all() for user in users: print(user.name, user.email) ``` 以上就是使用 Flask pymysql ORM 操作 MySQL 数据库的基本步骤。 ### 回答2: 使用Flask与pymysql ORM的结合可以帮助我们更轻松地处理数据库操作。下面是一个简单的使用pymysql ORM的Flask示例: 首先,在项目的Python虚拟环境中安装Flaskpymysql模块。 接下来,在Flask应用程序的主文件中,我们需要导入pymysqlFlask的相关模块: ``` from flask import Flask from flask_sqlalchemy import SQLAlchemy import pymysql ``` 然后,我们需要配置Flask应用的数据库连接信息: ``` app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/dbname' db = SQLAlchemy(app) ``` 在这里,我们将`username`、`password``dbname`替换为实际的数据库用户名、密码数据库名称。 接下来,定义一个pymysql ORM模型对象,来映射数据库中的表结构: ``` class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) email = db.Column(db.String(50), unique=True) ``` 这段代码定义了一个名为`User`的模型类,其中`id`、`name``email`是对应表中的字段。 然后,我们需要创建数据库表结构,可以通过以下代码实现: ``` with app.app_context(): db.create_all() ``` 现在,我们就可以通过该模型对象来对数据库进行操作了。例如,插入一条数据的代码如下: ``` with app.app_context(): user = User(name='John', email='john@example.com') db.session.add(user) db.session.commit() ``` 通过这个简单例子,我们可以看到Flask与pymysql ORM的结合使用,可以帮助我们更方便地进行数据库操作。当然,在实际项目中,可能还需要处理更复杂的数据库操作,但基本原理是相同的。 ### 回答3: 使用Flask结合pymysql ORM可以创建一个基于MySQL数据库的Web应用程序。 首先,要确保已经安装了Flaskpymysql库。接下来,需要在Flask应用程序中导入相关的依赖库模块: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@host/database_name' db = SQLAlchemy(app) Base = declarative_base() ``` - 创建一个包含字段的模型类: ```python class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String(50)) email = Column(String(50)) ``` - 创建数据库表: ```python @app.route('/create') def create_table(): db.create_all() return 'Table created successfully!' ``` - 插入数据到数据库表: ```python @app.route('/insert') def insert_user(): user = User(username='John', email='john@example.com') db.session.add(user) db.session.commit() return 'User inserted successfully!' ``` - 查询数据库表中的数据: ```python @app.route('/users') def get_users(): users = User.query.all() result = [] for user in users: result.append({'id': user.id, 'username': user.username, 'email': user.email}) return {'users': result} ``` - 更新数据库表中的数据: ```python @app.route('/update/<int:user_id>') def update_user(user_id): user = User.query.get(user_id) if user: user.email = 'updated_email@example.com' db.session.commit() return 'User updated successfully!' else: return 'User not found!' ``` - 删除数据库表中的数据: ```python @app.route('/delete/<int:user_id>') def delete_user(user_id): user = User.query.get(user_id) if user: db.session.delete(user) db.session.commit() return 'User deleted successfully!' else: return 'User not found!' ``` 以上就是使用Flaskpymysql ORM创建基于MySQL数据库的Web应用程序的简单示例。通过这些示例,可以实现对数据库表的创建、插入、查询、更新删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值