Python操作MySQL(二)ORM篇

  

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

  <人力资源/>   

一、安装

  
 <代码> pip3安装SQLAlchemy  
  

 Python操作MySQL(二)ORM篇

  

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篇