SQLAlchemy使用学习

来源:互联网 发布:cms监控软件操作说明 编辑:程序博客网 时间:2024/06/01 22:16

一、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-8import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, String# 创建实例,并连接test库HOSTNAME = '192.168.1.38'DATEBASE = 'awoa'USERNAME = 'root'PASSWORD = '123456'PORT = 3306DB_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 123456id:  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: abcdename: 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: aiwenname: 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: 9zhangjia删除后user的id Nonewangjia删除的结果 [] 0   
原创粉丝点击