Python SQLAlchemy 模块简单使用

ORM框架使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。如今最知名的Python ORM模块是SQLAlchemy 和SQLObject,今天简单介绍一下SQLAlchemy。

 

先看一下自己的系统是否安装SQLAlchemy模块:

 Python SQLAlchemy 模块简单使用_第1张图片

我这边是没有安装的,因为我的系统有python2和python3两个版本,我这边默认使用的是Python2,先进入Python2用pip进行安装:

 Python SQLAlchemy 模块简单使用_第2张图片

Python SQLAlchemy 模块简单使用_第3张图片

再在python console端import一下试试看安装是否成功:

 Python SQLAlchemy 模块简单使用_第4张图片

 

我们来看一下SQLAlchemy的简单框架图:

 Python SQLAlchemy 模块简单使用_第5张图片

 

首先,我们根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

 

MySQL-Python

   mysql+mysqldb://:@[:]/

 

pymysql

   mysql+pymysql://:@/[?]

 

MySQL-Connector

   mysql+mysqlconnector://:@[:]/

 

cx_Oracle

   oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

 

更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html

 因为上一篇我们使用了mysqldb,这里我们直接用mysql-python来进行操作

使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。:

这边简单演示一个连接并查询:

 

#!/usr/bin/ env python
#coding=utf-8

from sqlalchemy import create_engine

#创建引擎
engine = create_engine("mysql+mysqldb://root@localhost:3306/python", max_overflow=5)
#执行查询sql语句
result = engine.execute('select * from test')
res = result.fetchall()
print(res)

 

ORM功能基本使用
使用 ORM/Schema Type/SQL ExpressionLanguage/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

这边可以简单创建几个表:

 

#!/usr/bin/ env python
#coding=utf-8

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine

engine = create_engine("mysql+mysqldb://root@localhost:3306/python", max_overflow=5)

Base = declarative_base()

# 创建单表
class Users(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    extra = Column(String(16))

    __table_args__ = (
    UniqueConstraint('id', 'name', name='uix_id_name'),
    Index('ix_id_name', 'name', 'extra'),
    )

# 一对多
class Favor(Base):
    __tablename__ = 'favor'
    nid = Column(Integer, primary_key=True)
    caption = Column(String(50), default='red', unique=True)

class Person(Base):
    __tablename__ = 'person'
    nid = Column(Integer, primary_key=True)
    name = Column(String(32), index=True, nullable=True)
    favor_id = Column(Integer, ForeignKey("favor.nid"))

# 多对多
class ServerToGroup(Base):
    __tablename__ = 'servertogroup'
    nid = Column(Integer, primary_key=True, autoincrement=True)
    server_id = Column(Integer, ForeignKey('server.id'))
    group_id = Column(Integer, ForeignKey('group.id'))

class Group(Base):
    __tablename__ = 'group'
    id = Column(Integer, primary_key=True)
    name = Column(String(64), unique=True, nullable=False)

class Server(Base):
    __tablename__ = 'server'

    id = Column(Integer, primary_key=True, autoincrement=True)
    hostname = Column(String(64), unique=True, nullable=False)
    port = Column(Integer, default=22)

# Base.metadata.create_all(engine)  #创建表
Base.metadata.drop_all(engine)   #删除表


当然这些只是一些简单的使用,一点一滴都需要我们在具体的使用中学习,以后再续。


具体使用我们可以参考http://docs.sqlalchemy.org/en/latest/dialects/mysql.html

你可能感兴趣的:(python)