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
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对象。