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对象。
原文地址:https://www.cnblogs.com/Pythonzrq/p/13305791.html