01 ORM

在服务器后台,数据是要存储在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办呢?是不是需要把所有的 SQL 语句都再重新写一遍呢?

和数据库相关,不同的数据库需要写不同的 SQL 语句

使用 ORM 隔离框架和数据库

ORM全称 Object Relational Mapping对象关系映射

通过 ORM 可以不用关心后台是使用的哪种数据库,只需要按照 ORM 所提供的语法规则去书写相应的代码, ORM 就会自动的转换成对应数据库的 SQL 语句 ,一个类对应一张一表.

02 SQLAlchemy连接数据库

第一步:安装

安装: mysql

安装python包: pymysql、sqlalchemy

pip安装 python 包

pip install -i https://pypi.douban.com/simple pymysql

pip install -i https://pypi.douban.com/simple sqlalchemy

这里是使用国内的源

第二步:导入模块

from sqlalchemy import create_engine

第三步:数据库数据

HOSTNAME = '127.0.0.1' #常量用大写

PORT = '3306'

DATABASE = 'mydb'

USERNAME = 'admin'

PASSWORD = 'pswd'

第四步:数据连接 URL

Db_Uri = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(

USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)

第五步:连接数据库

engine = create_engine(Db_Uri)

第六步:测试连接

if __name__ == '__main__':

  connection = engine.connect() result = connection.execute('select 1') print(result.fetchone())

03 Module

第一步:创建 Module 的 Base 类

新建一个base.py文件.

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base(engine)

对象关系型映射,数据库中的表与python中的类相对应,创建的类必须继承自 sqlalchemy 中的基类。

使用 declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录。

应用通常只需要有一个 Base 的实例。我们通过 declarative_base() 功能创建一个基类。

第二步:创建 Module

新建一个user_module.py

from datetime import datetime

from sqlalchemy import Column, Integer, String, DateTime,Boolean

from connect import Base

class User(Base):

   --tablename-- = 'user'

   id = Column(Integer,primary_key=True,autoincrement=True)

   username = Column(String(20),nullable=False)

  password = Column(String(50))

   creatime = Column(DateTime,default=datetime.now)

  update_time = Column(DateTime,default = datetime.now()

  _locked = Colume(Boolean,default=False,nullable=False)

)

再次强调,我们用类来表示数据库里面的表!!!

这些表的类都继承于我们的Base基类。

在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段

第三步:启动 Module

Base.metadata.create_all()

执行此代码,就会把创建好的 Module 映射到数据库中

Module

--tablename--: 数据库中的表名

Column: 用来创建表中的字段的一个方法

Integer: 整形,映射到数据库中的int类型

String: 字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度

DateTime: 时间类型

通过 SQLAlchemy  提供的语法来声明表

04 增删改查

第一步:创建会话

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(engine) #传入引擎

session = Session()

在对表数据进行增删改查之前,先需要建立会话,建立会话之后才能进行操作,就类似于文件要打开之后才能对文件内容操作

add

person = User(username='buodng', password='qwe123')

session.add(person)

session.commit()

session.add_all([

User(username='tuple', password=2),           User(username='which', password=3)

]) #加多条

add 是添加一条数据, add_all 添加多条数据

query

rows = session.query(User).all()

rows = session.query(User).first()

query 就是查询的意思,在 SQLAlchemy 中也用来查询数据

all 是查询所有的意思

first 是查询第一条数据

在后面会详细介绍更多的用法

update

rows = session.query(User).filter(User.username=='budong').update({User.password:1}) #修改值放到字典里面去.

session.commit()

update  用来更改数据

delete

rows = session.query(User).filter(User.username=='budong')[0]

#用filter查出来的是一条原生的SQL语句

print(rows)

session.delete(rows)

session.commit()

使用 delete 方法来删除数据

最新文章

  1. 【转载】Java集合类Array、List、Map区别和联系
  2. C++11 auto and decltype
  3. android实现两个activity数据交互
  4. OC拓展(category)
  5. 使用Eclipse maven构建springmvc项目
  6. 如何屏蔽LOGD\LOGI等打印输出
  7. c#调用c++ dll(二)
  8. System Operations on AWS - Lab 4W - Monitoring (Windows)
  9. 『Python』 多线程 共享变量的实现
  10. hive join 优化
  11. PrefixHeader.pch' file not found 以及 Xcode 中如何添加pch文件
  12. 自学Java HashMap源码
  13. .12-Vue源码之patch(2)
  14. 【mac】mac os X更新High Sierra后出现的问题
  15. 基于物品的协同过滤item-CF 之电影推荐 python
  16. VisualStuido C# Files 的值“<<<<<<< .mine”无效。路径中具有非法字符。
  17. SpringMVC(3):DispatcherServlet详解
  18. mysql查询一个表的字段,添加或修改到另外一个表的数据
  19. linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
  20. bzo1007 [HNOI2008]水平可见直线

热门文章

  1. git apply
  2. Codeforces Round #261 (Div. 2) C
  3. Tomcat启动后打开页面提示404错误的解决
  4. (021)VMWare副虚拟磁盘和子虚拟磁盘id不匹配
  5. 在solr客户端删除库中的数据
  6. php Try Catch多层级异常测试
  7. html/css实现聊天布局
  8. 使用laravel的Command实现搜索引擎索引和模板的建立
  9. LibreOJ #101. 最大流
  10. Android(java)学习笔记186:多媒体之视频播放器