SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
<人力资源/>一、安装
<代码> pip3安装SQLAlchemy 代码>
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,方言用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
<代码> MySQL-Python mysql + mysqldb://& lt; user>: & lt; password> @[: & lt; port>]/& lt; dbname> pymysql mysql + pymysql://& lt; username>: & lt; password> @ /& lt; dbname> [? & lt; options>] MySQL-Connector mysql + mysqlconnector://& lt; user>: & lt; password> @ [: & lt; port>]/& lt; dbname> cx_Oracle 甲骨文+ cx_oracle://用户:pass@host:港口/dbname[?键=value&键=价值…] 更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html 代码>
二,内部处理
使用引擎/ConnectionPooling方言进行数据库操作,引擎使用ConnectionPooling连接数据库,然后再通过方言执行SQL语句。
<代码> # !/usr/bin/env python # - * -编码:utf - 8 - * 从sqlalchemy进口create_engine #处理中文 # sqlalchemy设置编码字符集一定要在数据库访问的URL上增加charset=utf8,否则数据库的连接就不是utf8的编码格式 引擎=create_engine (“mysql + pymysql://根:123 @127.0.0.1:3306/t1吗?charset=utf8’”, max_overflow=5,回声=True) #执行SQL # cur=engine.execute ( #“插入主机(主机、color_id)值(“1.1.1.22”,3)” #) #新插入行自增ID # cur.lastrowid #执行SQL # cur=engine.execute ( #“插入主机(主机、color_id)值(% s % s)”, [(1.1.1.22, 3), (“1.1.1.221”, 3),) #) #执行SQL # cur=engine.execute ( #“插入主机(主机、color_id)值(%(主机),% (color_id) s)”, #主机=1.1.1.99,color_id=3 #) #执行SQL # cur=引擎。execute (select * from主机) #获取第一行数据 # cur.fetchone () #获取第n行数据 # cur.fetchmany (3) #获取所有数据代码>
三,ORM功能使用
使用ORM/模式类型/SQL表达式语言/发动机/ConnectionPooling/方言所有组件对数据进行操作,根据类创建对象,对象转换成SQL,执行SQL。
1,创建表
<代码> # !/usr/bin/env python # - * -编码:utf - 8 - * 从sqlalchemy.ext.declarative进口declarative_base 从sqlalchemy导入列,整数,字符串,ForeignKey UniqueConstraint、索引 sqlalchemy。orm进口sessionmaker,关系 从sqlalchemy进口create_engine 引擎=create_engine (“mysql + pymysql://根:123 @127.0.0.1:3306/t1”, max_overflow=5) 基?declarative_base () #创建单表 类用户(基础): __tablename__='用户的 id=列(整数,primary_key=True) (String name=列(32) 额外的列(字符串(16))=__table_args__=( UniqueConstraint (“id”,“名字”,name=' uix_id_name '), 指数(“ix_id_name”、“名称”,“额外”), ) #一对多 类支持(基础): __tablename__='忙' nid=列(整数,primary_key=True) 标题=列(字符串(50)、默认=昂焐?独特的=True) 类人(基础): __tablename__='人' nid=列(整数,primary_key=True) name=列(String(32),指数=True, nullable=True) favor_id=列(整数,ForeignKey (“favor.nid”)) #多对多 类组(基础): __tablename__=凹拧? id=列(整数,primary_key=True) name=列(String(64),独特的=True, nullable=False) (整数,默认端口=列=22) 类服务器(基础): __tablename__=胺衿鳌? id=列(整数,primary_key=True,自动增量=True) 主机名=列(String(64),独特的=True, nullable=False) 类ServerToGroup(基础): __tablename__=' servertogroup ' nid=列(整数,primary_key=True,自动增量=True) server_id=列(整数,ForeignKey (server.id)) group_id=列(整数,ForeignKey (group.id)) def init_db (): Base.metadata.create_all(引擎) def drop_db (): Base.metadata.drop_all(引擎) 注:设置外检的另一种方式ForeignKeyConstraint ([' other_id '], [' othertable.other_id '])Python操作MySQL(二)ORM篇