博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

sqlalchemy操作----建表 插入 查询 删除

Posted on 2018-06-01 21:28  alex_hrg  阅读(255)  评论(0编辑  收藏  举报

。。。

#!_*_coding:utf-8_*_
#__author__:"Alex huang"
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String


engine = create_engine("mysql+pymysql://hrg:123@192.168.80.200:3306/test",encoding='utf8')
Base = declarative_base()  #生成orm基类

class User(Base):
    __tablename__ = 'user' #表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))
    def __repr__(self):
        return "id:%s name:%s" %(self.id,self.name)

Base.metadata.create_all(engine)  #创建表
Session_class = sqlalchemy.orm.session.sessionmaker(bind=engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class()  # 生成session实例
#
#插入
# user_obj = User(name="alex", password="alex3714")  # 生成你要创建的数据对象
# user_obj2 = User(name="alex2", password="alex3714")  # 生成你要创建的数据对象
# print(user_obj.name, user_obj.id)  # 此时还没创建对象呢,不信你打印一下id发现还是None
# Session.add(user_obj)  # 把要创建的数据对象添加到这个session里, 一会统一创建
# Session.add(user_obj2)  # 把要创建的数据对象添加到这个session里, 一会统一创建
# print(user_obj.name, user_obj.id)  # 此时也依然还没创建
# Session.commit()  # 现此才统一提交,创建数据

#查询
#data = Session.query(User).filter().first()  #只取返回的第一条记录
#data = Session.query(User).filter().all()   #取返回的所有记录
'''filter_by与filter的区别,用法不同而已,filter 可以像写 sql 的 where 条件那样写 > < 等条件,
但引用列名时,需要通过 类名.属性名 的方式。 filter_by 可以使用 python 的正常参数传递方法传递条件,
指定列名时,不需要额外指定类名。,参数名对应名类中的属性名,但似乎不能使用 > < 等条件。各有所长吧'''
#data = Session.query(User).filter(User.id>2).all()   #加过滤条件id大于2的
#data = Session.query(User).filter(User.id==2).all()
#data = Session.query(User).filter_by(id=2).all()
# data = Session.query(User).filter(User.id>2).filter(User.id<5).all()  #多条件查询
# print(data)     #其实返回的data只是一个对象,即内存地址。所以在表定义类中有了返回函数__repr__,data才是实际的内容。
# print(data[0].password,data[0].name)
#
#修改
# data = Session.query(User).filter(User.id>2).filter(User.id<5).all()  #先查询出要修改的内容
# print(data)     #修改前内容
# data[0].name = "new alex"
# data[0].password = 'nnn'
# data[1].name = "new2"
# Session.commit()
#
#删除
Session.query(User).filter(User.id==4).delete()  #先查询出要删除的内容直接删除
data = Session.query(User).filter().all()  #先查询出要修改的内容
print(data) #修改后内容

  。。。