zoukankan      html  css  js  c++  java
  • tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    tornado 06 数据库—ORM—SQLAlchemy——基本内容及操作

    一、 ORM

    #在服务器后台,数据是要储存在数据库的,但是如果项目在开发和部署的时候,是使用的不同的数据库,该怎么办?是不是需要把所有的SQL语句在重新写一遍呢?
    
    #用ORM隔离框架和数据库
    tornado ------> ORM -------> 数据库
    #ORM 
    #全称:Object Relational Mapping 对象关系映射
    #通过ORM可以不用关心后台是使用的哪种数据库,只需要按照ORM所提供的语法规则去书写相应的代码,ORM就会自动地转换成对应数据库的SQL语句

    二、SQLAlchemy 连接数据库

    #1、安装SQLAlchemy
        pip install pymysql
        pip install sqlalchemy
    #2、导入模块
        from sqlalchemy import create_engine
    #3、数据库数据
    HOSTNAME = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'mydb'
    USERNAME = 'admin'
    PASSWORD = 'Root110qwe'
    #4、创建数据库
    mysql  -u root -p qwe123 #进入mysql
    create database `mydb`; #创建mydb数据库
    select host,user from mysql.user; #查看host user
    grant all on *.* to 'admin'@'%'; # 赋予权限
    flush privileges; #刷新数据库

       python代码,这是在connect.py里面的代码

    from sqlalchemy import  create_engine
    
    HOSTNAME = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'mydb'
    USERNAME = 'admin'
    PASSWORD = 'Root110qwe'
    
    Db_url = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(
        USERNAME,
        PASSWORD,
        HOSTNAME,
        PORT,
        DATABASE
    )
    
    engine = create_engine(Db_url)
    
    if __name__ == '__main__':
        connetion = engine.connect()
        result = connetion.execute('select 1')
        print(result.fetchone())

     三、创建module

    #刚才已经使用SQLAlchemy连上数据库,现在该如何在数据库里面新建表呢?
    #数据库里面的一张表代表python中的一个类
    #第1步 创建Module的Base类,在connect.py里面添加
    
    from sqlalchemy.ext.declarative import  declarative_base
    Base = declarative_base(engine)
    
    #对象关系类映射,数据库中的表和python中的相对应,创建的类必须继承自sqlalchemy中的基类
    
    #使用declarative方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录
    
    #应用通常只需要有一个Base的实例。我们通过declarative_base() 功能创建一个基类。
    #以后换数据库的时候,只需要改变数据库的上面的代码,如HOSTNAME等等,后面的user_modules都不需要改变
    #第2步 创建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))
        password = Column(String(50))
        creatime = Column(DateTime,default=datetime.now)
        _locked = Column(Boolean,default=False,nullable=False)
    
    
        def __repr__(self): #这一段可有可无
            return """<User(id=%s)>
            """%(
                self.id
            )
    
    #我们用类来表示数据库里面的表!!!
    
    #这些表的类都继承于我们的Base基类
    
    #在类里面我们定义一些属性,这个属性通过映射,就对应表里面的字段
    #第3步 创建Module
    if __name__ == '__main__':
        Base.metadata.create_all()
    
    #执行此代码,就会把创建好的Module映射到数据库中
    Module
        __tablename__ = 'user' #数据库中的表名
        id = Column(Integer,primary_key=True,autoincrement=True)#Column用来创建表中的字段的一个方法;整型,映射到数据库中的int类型;表内元素分别为主键和自动添加编号
        username = Column(String(20)) #字符类型,映射到数据库中的varchar类型,需要提供一个字符长度
        password = Column(String(50))
        creatime = Column(DateTime,default=datetime.now) #时间类型
        _locked = Column(Boolean,default=False,nullable=False) #表内元素分别表示默认和非空
    #想要from connect import Base不报错(报错时是可以运行代码的)
    
    #在data文件夹里面右键 选中Mark directory as 选中sources root

    四、增删改查

    #如何增删改查数据库里面的数据呢
    
    #在connect.py里面输入一下代码
    
    from sqlalchemy.orm import sessionmaker
    Session = sessionmaker(engine)
    session = Session()
    #再创建一个test_user_module.py用来实现增删改查
    from connect import session #导入session
    from user_modules import User #导入module
    
    def add_user(): #
        person = User(username='gaohuiqi',password='123') #插入1条
        #session.add(person)
        session.add_all([
                User(username='zhouzhou',password='123'),
                User(username='lala',password='1234')
            ]
        )# 插入多条数据
    
        session.commit() #刷入
    
    def search_user():#
        rows = session.query(User).all() #查询所有
        rows = session.query(User).first() #查询第一个
        print(rows)
    
    def update_user():#
        rows = session.query(User).filter(User.username=='gaohuiqi').update({User.password:1})
        session.commit()
    
    def delete_user():#删除
        rows = session.query(User).filter(User.username=='gaohuiqi')[0]
        print(rows)
        session.delete(rows)
        session.commit()
    
    if __name__=='__main__': #调用
        # add_user()
        # search_user()
        # update_user()
        delete_user()
    #
    在查的时候如果出现一些内存地址而不是具体的表的数据,就需要在前面写上user_module.py里面写上repr(重写函数)
  • 相关阅读:
    Python开发——数据类型【字典】
    Python开发——数据类型【元祖】
    Python开发——数据类型【列表】
    Python开发——基础
    Python开发——数据类型【运算符】
    c#中IList<T>与List<T>
    观察者模式(Observer Pattern)
    中介者模式(Mediator Pattern)
    策略模式(Strategy Pattern)
    命令模式
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9005203.html
Copyright © 2011-2022 走看看