博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
orm-sqlalchemy
阅读量:6852 次
发布时间:2019-06-26

本文共 4131 字,大约阅读时间需要 13 分钟。

1.ORM

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

        

ORM

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

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

2. 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 这里是使用国内的源

创建/data目录,在下面创建connect.py文件

from sqlalchemy import create_engine  #第二步:导入模块 #第三步:数据库数据USERNAME = 'admin'PASSWORD = 'Root110qwe'HOST = '127.0.0.1'PORT = 3306DATABASE = 'mydb'Db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(   #第四步:数据连接 URL
USERNAME,    PASSWORD,    HOST,    PORT,    DATABASE)engine = create_engine(Db_url) #第五步:连接数据库
if __name__ == '__main__':    #第六步:测试连接
connection = engine.connect() #定义游标    result = connection.execute('select 1')    print(result.fetchone())

3.创建Module

第一步:创建 Module 的 Base 类

在connect.py文件中生成Base类

from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base(engine) #数据库建模使用继承来建立

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

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

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

第二步:创建 Module

新增user_modules.py文件

#这个文件是用来建立模型from connect import Basefrom sqlalchemy import Column,Integer,String,DateTime,Booleanfrom datetime import datetimeclass User(Base):    '''    建立一个User模型,建立一张user表    '''    __tablename__ = 'user'    id = Column(Integer,autoincrement=True,primary_key=True)    username = Column(String(20))    password = Column(String(20))    create_time = Column(DateTime,default=datetime.now())    _locked = Column(Boolean,default=False,nullable=False) #当前用户是否已经登录,是否还能登录

#第三步:创建 Module

if __name__ == '__main__':    Base.metadata.create_all() #创建表格

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

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

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

Module

__tablename__: 数据库中的表名

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

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

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

DateTime: 时间类型

4. 数据的增删改查

第一步:创建会话

在connect.py中添加

from  sqlalchemy.orm import sessionmakerSession = sessionmaker(engine)  #生成一个会话类,用来操作数据session = Session()

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

add

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

query

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

all 是查询所有的意思

first 是查询第一条数据

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

update

update更新是需要使用字典传值

delete

使用 delete 方法来删除数据

创建test_user_module.py文件。

from connect import sessionfrom user_modules import Userdef add_user():    '''添加数据'''    person = User(username='shiwei',password='1234')    session.add_all([  #接收一个列表,添加多条,每一条是列表里面的一个元素        User(username='塔卡',password='12341'),        User(username='小泼',password='55432'),        User(username='清空',password='12341'),    ])    # session.add(person)  #会默认开启一个事物,添加一条    session.commit()  #提交事务def search_user():    '''查看数据'''    rows = session.query(User).all()  #查询所有    # rows = session.query(User).first()  #查询第一条    print(rows)def update_user():    '''更新数据'''    #更新是需要使用字典传值    session.query(User).filter(User.username == '塔卡').update({User.password:'23115'})    session.commit()def delete_user():    '''删除数据'''    rows = session.query(User).filter(User.username == '式微')[0]  #需要使用索引取原生SQL值,不然会是    print(rows)    session.delete(rows)    session.commit()if __name__ == '__main__':    delete_user()

 

执行查询search_user()时,会显示如下内容。需要对module模块进行重写__repr__

[<user_modules.User object at 0xb679104c>, <user_modules.User object at 0xb679190c>, <user_modules.User object at 0xb679194c>, <user_modules.User object at 0xb679198c>, <user_modules.User object at 0xb67919cc>]

class User(Base):    '''    建立一个User模型,建立一张user表    '''    __tablename__ = 'user'    id = Column(Integer,autoincrement=True,primary_key=True)    username = Column(String(20))    password = Column(String(20))    create_time = Column(DateTime,default=datetime.now())    _locked = Column(Boolean,default=False,nullable=False) #当前用户是否已经登录,是否还能登录    def __repr__(self):        return '''        
'''%(self.id,self.username,self.password,self._locked)

重新运行search_user.py文件,展示结果如下,解析成容易读取的信息:

转载于:https://www.cnblogs.com/taoge188/p/10640058.html

你可能感兴趣的文章
在RHEL5下搭建SSH远程登录服务器
查看>>
使用Moblin SDK开发应用程序 -- Image Creator
查看>>
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记14 视图绘制Demo
查看>>
/dev/null &
查看>>
在Ubuntu上安装Node.js的Upstream版本
查看>>
扩展GridView控件(8) - 导出数据源的数据为Excel、Word或Text
查看>>
CISCO路由器配置基础(3)
查看>>
linux下通过串口登陆交换机
查看>>
微信公众平台群发规则说明
查看>>
LINUX下直接使用ISO文件
查看>>
第四章 apache的工作模式
查看>>
mysql备份和恢复总结
查看>>
软件明明已经删除 控制面板里还有名称
查看>>
深入浅出的SQL server 查询优化
查看>>
Hyper-V vNext新的虚拟机配置文件、配置版本
查看>>
通俗易懂,各常用线程池的执行 流程图
查看>>
CentOS 6.4 安装python2.7/mysqldb/ipython
查看>>
hive0.11 hiveserver custom认证bug
查看>>
Windows Phone SDK 8.0 新特性-Speech
查看>>
VS~单步调试DLL
查看>>