zoukankan      html  css  js  c++  java
  • SQLAlchemy

    SQLAlchemy

    安装

    安装:sudo pip3 install sqlalchemy

    model定义

    首先导入from sqlalchemy.ext.declarative import declarative_base
    然后创建一个实例,Base=declarative_base(),后面所有定义的model都是Base的子类,继承Base。
    model中一条数据类似于Excel的行,使用Column。
    
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String
    
    Base=declarative_base()
    
    class User(Base):
        __tablename__='user'
    
        id=Column(Integer,primary_key=True,autoincrement=True)
        name=Column(String(20),unique=True,nullable=False)
        pwd=Column(String(100),nullable=False)
        info=Column(Text)
        def __repr__(self):
            return '<User %r>'%self.name

    数据库连接

    from sqlalchemy import create_engine # 数据连接
    eng=create_engine(DB_URI)
    DB_URI的格式如下:dialect+driver://username:password@host:port/database
    例如Mysql,DB_URI=mysql+mysqlclient://aa:123@localhost/foo, echo=True

    
    
     echo参数为True时,会显示每条执行的SQL语句,可以关闭,
     create_engine()返回一个Engine的实例,并且它表示通过数据库语法处理细节的核心接口,在这种情况下,数据库语法将会被解释成python的类方法。
     解释说明:
     mysql://fxq:123456@192.168.100.101/sqlalchemy
     mysql: 指定是哪种数据库连接
     第一个aa: 用户名
     123: aa用户对应的密码
     127.0.0.1: 数据库的ip

    使用mysql创建列表

    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    sql = '''create table student(
        id int not null primary key,
        name varchar(50),
        age int,
        address varchar(100));
    '''
    
    engine = create_engine('mysql+pymysql://fxq:123456@192.168.100.101/sqlalchemy')
    conn = engine.connect()
    conn.execute(sql)
    engine.connect() #表示获取到数据库连接。类似我们在MySQLdb中游标course的作用。

    使用orm创建列表

    from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
    
    engine = create_engine('mysql+pymysql://fxq:123456@192.168.100.101/sqlalchemy')
    metadata = MetaData(engine)
    
    student = Table('student', metadata,
                Column('id', Integer, primary_key=True),
                Column('name', String(50), ),
                Column('age', Integer),
                Column('address', String(10)),
    )
    
    metadata.create_all(engine)
     MetaData类主要用于保存表结构,连接字符串等数据,是一个多表共享的对象
     metadata = MetaData(engine) #绑定一个数据源的metadata
     metadata.create_all(engine) #是来创建表,这个操作是安全的操作,会先判断表是否存在。

    创建对话

    说到数据库,就离不开Session。Session的主要目的是建立与数据库的会话,它维护你加载和关联的所有数据库对象。它是数据库查询(Query)的一个入口。
    在Sqlalchemy中,数据库的查询操作是通过Query对象来实现的。而Session提供了创建Query对象的接口。
    Query对象返回的结果是一组同一映射(Identity Map)对象组成的集合。事实上,集合中的一个对象,对应于数据库表中的一行(即一条记录)。所谓同一映射,是指每个对象有一个唯一的ID。如果两个对象(的引用)ID相同,则认为它们对应的是相同的对象。
    要完成数据库查询,就需要建立与数据库的连接。这就需要用到Engine对象。一个Engine可能是关联一个Session对象,也可能关联一个数据库表。
    当然Session最重要的功能还是实现原子操作。
    ORM通过session与数据库建立连接进行通信
    
    from sqlalchemy.orm import sessionmaker
    
    DBSession = sessionmaker(bind=engine)
    session = DBSession()
    通过sessionmake方法创建一个Session工厂,然后在调用工厂的方法来实例化一个Session对象。
  • 相关阅读:
    利用ApplicationListener和ContextRefreshedEvent加载自己的beanPool
    java对象转变为map
    Java通过poi创建Excel文件并分页追加数据
    Java通过poi读取excel中文件
    SpringMvc通过controller上传文件代码示例
    SpringCloud组件学习-图
    Java-线程间通信小结
    Java-关于Thread
    Java-对象及变量的并发访问小结
    java爬取免费HTTP代理 code-for-fun
  • 原文地址:https://www.cnblogs.com/Pythonzrq/p/13305791.html
Copyright © 2011-2022 走看看