zoukankan      html  css  js  c++  java
  • sqlalchemy(二)简单的连接示例

    # -*- coding: utf-8 -*-
    import sqlalchemy
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan')
    
    Base = declarative_base()  # 生成orm基类
    
    
    class User(Base):  #进行映射,创建表结构,models ,三项,id name password
        __tablename__ = 'user'  # 表名
        id = Column(Integer, primary_key=True)
        name = Column(String(32))
        password = Column(String(64))
    
    
    Base.metadata.create_all(engine)  # 创建表结构
    Session_class = sessionmaker(bind=engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
    Session = Session_class()  # 生成session实例
    # Session.close()#关闭连接 这个放最后
    
    
    # 插入开始
    print('插入开始')
    user_obj = User(name="jack", password="jack")  # 生成你要创建的数据对象
    print(user_obj.name, user_obj.id)  # 此时还没创建对象呢,不信你打印一下id发现还是None
    
    Session.add(user_obj)  # 把要创建的数据对象添加到这个session里, 一会统一创建
    print(user_obj.name, user_obj.id)  # 此时也依然还没创建
    
    Session.commit()  # 现此才统一提交,创建数据
    print('提交数据')
    print(user_obj.name, user_obj.id)  # 提交过,就会放在数据库里了。
    # 插入结束
    print('插入结束')
    
    # 查询开始
    print('查询开始')
    my_user = Session.query(User).filter_by(name="jack").first()  # 查找name=jack的
    print(my_user)  # 这查出来是个对象
    print(my_user.id, my_user.name, my_user.password)
    # 查询结束
    print('查询结束')
    
    # 删除开始
    print('删除开始')
    # 先插入一个,可以删的。
    user_obj = User(name="rose", password="jack")
    Session.add(user_obj)
    Session.commit()
    # 查找到需要删的对象
    del_user = Session.query(User).filter_by(name="rose").first()
    print(del_user.name)
    Session.delete(del_user)  # 删除命令
    Session.commit()  # 提交删除
    find_user = Session.query(User).all()#查询表的全部内容
    for i in find_user:
        print(i.id, i.name)
    # 删除结束
    
    
    # 修改开始
    print('修改开始')
    my_user = Session.query(User).filter_by(name="jack").first()  # 找到第一条名字是jack的,生成对象。
    my_user.name = "jackadam"  # 给对象变量命名
    temp_id = my_user.id  # 把这个对象的ID,赋值给临时变量temp_id
    Session.commit()  # 提交修改
    my_user2 = Session.query(User).filter_by(id=temp_id).first()  # 根据临时变量id,重新查询一下名字是否修改。
    print(my_user2.name)
    # 修改结束
    print('修改结束')
    # 多条件查询
    objs = Session.query(User).filter(User.id > 0).filter(User.id < 7).all()
    # 多条件查询
    
    # 统计
    print('统计')
    count_num = Session.query(User).filter(User.name.like("ja%")).count()
    print(count_num)
    
    # 统计
    
    # 分组
    print('分组')
    from sqlalchemy import func
    
    print(Session.query(func.count(User.name), User.name).group_by(User.name).all())
    # 分组
    Session.close()#最后不忘close
    
    '''
    orady_by
    desc  升序
    asc   降序
    '''

    注释很详细了,不写了

    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session, sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String
    
    engine = create_engine('mysql+mysqlconnector://plan:plan@mysql/plan', convert_unicode=True)
    db_session = scoped_session(sessionmaker(autocommit=False,
                                             autoflush=False,
                                             bind=engine))
    Base = declarative_base()
    Base.query = db_session.query_property()
    
    class User(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(String(50))
        email = Column(String(120))
    
        def __init__(self, name=None, email=None):
            self.name = name
            self.email = email
    
        def __repr__(self):
            return '<User %r>' % (self.name)
    
    
    def init_db():
        # 在这里导入所有的可能与定义模型有关的模块,这样他们才会合适地
        # 在 metadata 中注册。否则,您将不得不在第一次执行 init_db() 时
        # 先导入他们。
    
        Base.metadata.create_all(bind=engine)
    
    if __name__ == '__main__':
        init_db()
        print('C,创建数据')
        new_user=User(name= 'rose',email='rose@163.com')
        db_session.add(new_user)
        db_session.commit()
        db_session.remove()
        print('R,读取数据')
        new_user = User(name='jack', email='jack@163.com')
        db_session.add(new_user)
        db_session.commit()
        db_session.remove()
        msg=User.query.filter_by(name='jack').first()
        print(msg.email)
        print('U,更新数据')
        tag_user=User.query.filter_by(name='jack').first()
        tag_user.email='jack@hotmail.com'
        db_session.commit()
        db_session.remove()
        tag=User.query.filter_by(name='jack').first()
        print(tag.email)
        print('D,删除数据')
        del_user=User.query.filter_by(name='jack').first()
        db_session.delete(del_user)
        db_session.commit()
        db_session.remove()

    另一种简单的连接示例,http://docs.pythontab.com/flask/flask0.10/patterns/sqlalchemy.html

    从flask使用sqlalchemy文档中学到的。

    看了几个别人的代码,也是这样写的,用映射的类名来查询,不使用session。

  • 相关阅读:
    A Famous City
    A Famous ICPC Team
    配置单元测试环境,找不到SenTestingKit
    linux解压.tar命令
    语音输入——科大讯飞
    查看dsym错误信息
    工程里关闭arc
    导入签名错误
    mac显示隐藏文件
    类uialertview弹出动画
  • 原文地址:https://www.cnblogs.com/jackadam/p/8591650.html
Copyright © 2011-2022 走看看