SQLAlchemy执行原生SQL

安装

pip3 install sqlalchemy

数据库连接

sqlalchemy可以支持多种数据库的连接使用:下面是常用的几种

MySQL-Python(2.x)
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>

pymysql (python 3.x)
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>

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

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

执行原生SQL

#! -*- coding:utf8 -*-
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

'''第一步:连接数据库'''
engine = create_engine("mysql+pymysql://root:1@127.0.0.1/bsp?charset=utf8")
# engine = create_engine("mysql+pymysql://root:1@127.0.0.1/tomdb",encoding='utf-8', echo=True)

'''附加: 无论是增删改查都要先创建与数据库的会话session class'''
#创建与数据库的会话session class ,注意,这里返回给session的是个class类,不是实例
Session_class = sessionmaker(bind=engine)       #创建用于数据库session的类
session = Session_class()                       #这里才是生成session实例可以理解为cursor


'''第二步:操作数据库'''
#1、查看mysql中有哪些数据库
dbs=session.execute('show databases;').fetchall()

#2、切换当前数据库
session.execute('use bsp;')

#3、查询时过滤出第一条
row1=session.execute('select * from relations_department where Id>1;').first()
fid_id = row1.fid_id

#4、一对多关联查询: 根据上面查询的父部门id 可以找到父部门信息
row2=session.execute('select * from relations_department where Id=%s;'%fid_id).first()
print row2.name   # 政府事业部

python执行原生SQL


发表评论