码迷,mamicode.com
首页 > 数据库 > 详细

orm-sqlalchemy

时间:2019-04-02 00:12:06      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:host   ppi   功能   pytho   字符类型   一个   时间类   har   var   

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 = 3306 DATABASE = 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_base

Base = declarative_base(engine) #数据库建模使用继承来建立

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

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

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

第二步:创建 Module

新增user_modules.py文件

#这个文件是用来建立模型
from connect import Base
from sqlalchemy import Column,Integer,String,DateTime,Boolean
from datetime import datetime

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) #当前用户是否已经登录,是否还能登录

#第三步:创建 Module

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

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

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

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

Module

__tablename__: 数据库中的表名

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

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

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

DateTime: 时间类型

4. 数据的增删改查

第一步:创建会话

在connect.py中添加

from  sqlalchemy.orm import sessionmaker

Session = sessionmaker(engine)  #生成一个会话类,用来操作数据
session = Session()

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

add

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

query

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

all 是查询所有的意思

first 是查询第一条数据

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

update

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

delete

使用 delete 方法来删除数据

创建test_user_module.py文件。

from connect import session
from user_modules import User

def 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 ‘‘‘
        <User(id=%s,username=%s,create_time=%s,_locked=%s)>
        ‘‘‘%(self.id,self.username,self.password,self._locked)

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

技术图片

orm-sqlalchemy

标签:host   ppi   功能   pytho   字符类型   一个   时间类   har   var   

原文地址:https://www.cnblogs.com/taoge188/p/10640058.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!