SQLAlchemy使用学习

一、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   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值