ORM模型框架操作mysql数据库的方法


Posted in MySQL onJuly 25, 2021

【什么是ORM】

ORM 全称是(Object Relational Mapping)表示对象关系映射; 通俗理解可以理解为编程语言的虚拟数据库;

【理解ORM】

用户地址信息数据库表与对象的映射

ORM模型框架操作mysql数据库的方法

【ORM的重要特性】

1.面向对象的编程思想,方便扩充

2. 少写(几乎不写)sql,提升开发效率

3.支持多种类型的数据库(常用的mysql,pg,oracle等等),方便切换

4.ORM技术已经相当成熟,能解决绝大部分问题

【ORM模型框架的选择】

ORM模型框架操作mysql数据库的方法

【SQLAlchemy ORM模型】

众所周知,ORM框架模型可选择的有很多,那么我们这边选择了SQLAlchemy 模型框架

pip install SQLAlchemy 安装sql alchemy; 也可以指定版本号pip install SQLAlchemy ==1.4.17

import sqlalcherm; sqlalchemy.__version__; 验证是否安装成功及版本号;

【SQL Alchemy的使用】

一.开始连接数据库
二.声明ORM模型基类
三.实现ORM模型类
四.同步数据库表

开始连接数据库

  • 延迟连接(Lazy Connecting)——只有在真正操作数据库的时候,才会连接数据库
  • 连接代码示例
from sqlalchemy import  create_engine

create_engine("mysql://root:@127.0.0.1:3306/school?charset=utf8,echo=True,future=True")

create_engine 参数解释

  1. url(默认第一个参数)——连接到哪种类型的数据库,如:mysql;以哪种数据库连接器(驱动)来连接数据库
  2. echo——是否输出logging(日志)信息,会把日志都打印出来
  3. future使用SQLAlchemy2.0 API风格

SQLAlchemy配置

ORM模型框架操作mysql数据库的方法

当密码中含有特殊字符时,怎么处理?

话不多说,见下方代码

from urllib.parse import quote_plus
如果密码里有特殊字符时,这边需要导入一个类来处理

password_formatted= quote.plus("mima%&&&mima")
把处理后的密码粘贴到上方的sqlalchemy配置中,即可

声明ORM模型基类

from sqlalchemy.orm import declarative_base

声明这个基类
Base = declarative_base()

【实现ORM模型类】

如何实现? 我们需要写1个类去继承他

然后还需要设立1个属性

from sqlalchemy import Column, Integer, String, DateTime


class Student(Base):
    """学生信息表"""
    __tablename__ = 'student'
    id = Column(Integer, name='id', primary_key=True)
    stu_no = Column(Integer, nullable=False, comment='学号')
    stu_name = Column(String(16), nullable=False, comment='姓名')
    created_at = Column(DateTime)

1.需要在同步之前保证 数据库中有这个库,如果没有,则需要手动创建

2 创建表,删除表

from  orm_connect_example import Base ,engine

# 创建表
Base.metadata.create_all(engine)

#删除表
Base.metadata.drop_all(engine)

【ORM对应的模型字段类型】

ORM模型框架操作mysql数据库的方法

ORM模型框架操作mysql数据库的方法

【代码示例】

from sqlalchemy import create_engine
from sqlalchemy.orm import declarative_base
from sqlalchemy import Column, Integer, String, DateTime

# 第一步,准备连接
engine = create_engine('mysql://root:@10.72.100.1:8081/test_database_1?charset=utf8',echo=True)

# 第二步,声明ORM模型的基类
Base = declarative_base()


# 第三步,实现ORM模型类
class Student(Base):
    """学生信息表"""
    __tablename__ = 'student'
    id = Column(Integer, name='id', primary_key=True)
    stu_no = Column(Integer, nullable=False, comment='学号')
    stu_name = Column(String(16), nullable=False, comment='姓名')
    created_at = Column(DateTime)
#第四步 同步数据库表
def create_table()
    """同步数据库表"""
    # 新建表
    Base.metadata.create_all(bind=engine)
    # 删除表
    Base.metadata.drop_all(bind=engine)

到此这篇关于ORM模型框架操作mysql数据库的方法的文章就介绍到这了,更多相关ORM模型框架内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
详解MySQL数据库千万级数据查询和存储
May 18 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL中varchar和char类型的区别
Nov 17 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
mysql 直接拷贝data 目录下文件还原数据的实现
MySQL索引是啥?不懂就问
MySQL 四种连接和多表查询详解
MySQL 聚合函数排序
MySQL 那些常见的错误设计规范,你都知道吗
Jul 16 #MySQL
MySQL 5.7常见数据类型
mysq启动失败问题及场景分析
You might like
两种php调用Java对象的方法
2006/10/09 PHP
转换中文日期的PHP程序
2006/10/09 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
19个超实用的PHP代码片段
2014/03/14 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
微信小程序中吸底按钮适配iPhone X方案
2017/11/29 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python入门篇之条件、循环
2014/10/17 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python实现猜拳游戏项目
2020/11/30 Python
电气技术员岗位职责
2013/11/19 职场文书
工作会议方案
2014/05/21 职场文书
英语课外活动总结
2014/08/27 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
python基础之停用词过滤详解
2021/04/21 Python
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript