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。

  • 相关阅读:
    [转发]深入理解git,从研究git目录开始
    iOS系统网络抓包方法
    charles抓包工具
    iOS多线程中performSelector: 和dispatch_time的不同
    IOS Core Animation Advanced Techniques的学习笔记(五)
    IOS Core Animation Advanced Techniques的学习笔记(四)
    IOS Core Animation Advanced Techniques的学习笔记(三)
    IOS Core Animation Advanced Techniques的学习笔记(二)
    IOS Core Animation Advanced Techniques的学习笔记(一)
    VirtualBox复制CentOS后提示Device eth0 does not seem to be present的解决方法
  • 原文地址:https://www.cnblogs.com/jackadam/p/8591650.html
Copyright © 2011-2022 走看看