一、sqlalchemy安装
安装sqlalchemy
pip install SQLAlchemy
二、sqlalchemy的基本使用
Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
MySQL-Python
mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
pymysql
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
MySQL-Connector
mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
1、创建表
#coding=utf-8
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# 创建实例,并连接test库
HOSTNAME = '192.168.1.38'
DATEBASE = 'awoa'
USERNAME = 'root'
PASSWORD = '123456'
PORT = 3306
DB_URI = 'mysql://{}:{}@{}:{}/{}?charset=utf8'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATEBASE)
engine = create_engine(DB_URI,echo=True)
# echo=True 显示信息
Base = declarative_base() # 生成orm基类
class User(Base):
__tablename__ = 'user' # 表名
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64))
Base.metadata.create_all(engine) #创建表结构 (这里是父类调子类)
2、插入数据
2.1 插入一条数据
#创建游标
def creat_session():
session = None
try:
engine = create_engine(DB_URI, echo=False)
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine) #实例和engine绑定
session = DBSession() # 生成session实例,相当于游标
except Exception, e:
print "creat_session error:%s" % e
return session
#插入一条语句
def insert_one():
session=creat_session()
user=User(name='lijiajia',password='123456') # 生成你要创建的数据对象
print user.name,user.password,user.id # 此时还没创建对象呢,打印user.id结果发现还是None
session.add(user) #把要创建的对象添加到这个session里
print user.name,user.id #此时也依然还没创建
session.commit()#提交数据,创建数据。
session.close()#关闭游标
insert_one()
2.2 插入多条语句
#插入多条语句
def insert_many():
session = creat_session()
user1=User(name='zhangjia',password='123456')
user2=User(name='wangjia',password='abcde')
session.add(user1)
session.add(user2)
session.commit()
session.close()
3、查询语句
3.1查询一条语句
def select():
session=creat_session()
myuser=session.query(User).filter_by(name='lijiajia').first()
print myuser
session.close()
此时你看到的输出是这样的
<__main__.User object at 0x0000000003990CF8>
sqlalchemy把返回的数据映射成一个对象啦,这样你调用每个字段就可以跟调用对象属性一样
print 'id: ',myuser.id,' name: ',myuser.name,' password',myuser.password
#输出
id: 1 name: lijiajia password 123456
3.2 查询多条
def select():
session=creat_session()
user=session.query(User).filter_by(name='lijiajia').all()
for myuser in user:
print 'id: ',myuser.id,' name: ',myuser.name,' password',myuser.password
session.close()
#输出
id: 1 name: lijiajia password 123456
id: 2 name: lijiajia password 123456
4 更新数据
4.1 第一种更新方式
def update1():
#更新name='lijiajia'的password为'abcde'
session=creat_session()
session.query(User).filter_by(name='lijiajia').update({User.password:'abcde'})
session.commit()#提交事务
#查看结果
res=session.query(User).filter_by(name='lijiajia').all()
for each in res:
print 'name:',each.name,' password:',each.password
session.close()
#输出
name: lijiajia password: abcde
name: lijiajia password: abcde
4.2 第二种更新方式
def update2():
#更新 name='zhangjia'的password为'aiwen'
session=creat_session()
user=session.query(User).filter_by(name='zhangjia').all()
for each in user:
if each !=None:
each.password='aiwen'
session.commit()
res=session.query(User).filter_by(name='zhangjia').all()
for a in res:
print 'name:',a.name,' password:',a.password
session.close()
#输出结果:
name: zhangjia password: aiwen
name: zhangjia password: aiwen
5、删除数据
def delete():
session=creat_session()
user=session.query(User).filter_by(name='zhangjia').first()
print 'zhangjia删除前id:',user.id
#删除全部记录
user1=session.query(User).filter_by(name='wangjia').all()
#query.all()返回的一个类似列表的对像,删除所有记录需要将列表中的每一个对象都添加到session中。
[session.delete(u) for u in user1]
session.commit()
res1=session.query(User).filter_by(name='zhangjia',id=user.id).first()
print 'zhangjia删除后user的id',res1
res2=session.query(User).filter_by(name='wangjia').all()
print 'wangjia删除的结果',res2,len(res2)
session.close()
#输出结果
zhangjia删除前id: 9
zhangjia删除后user的id None
wangjia删除的结果 [] 0