zoukankan      html  css  js  c++  java
  • SQLAchemy模块

    老师的博客:http://www.cnblogs.com/wupeiqi/articles/5713330.html

    有一篇习详细的博客: http://www.keakon.net/2012/12/03/SQLAlchemy%E4%BD%BF%E7%94%A8%E7%BB%8F%E9%AA%8C

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

    安装:pip3 install SQLAlchemy

    导入常用的模块

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,CHAR,VARCHAR
    from sqlalchemy.orm import sessionmaker, relationship
    from sqlalchemy import create_engine

    连接

     连接数据库的用engine,不同的数据库和不同的连接模块的连接的写法不一样,我们用的是mysql和pymysql具体见下表:

    MySQL-Python
        mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
       
    pymysql
        mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    例如:engine = create_engine("mysql+pymysql://root:@localhost/review60?charset=utf8", max_overflow=5) # 表示最大连接数
    MySQL-Connector 
      mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
    更多详见:http://docs.sqlalchemy.org/en/latest/dialects/index.html

    创建列表

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index,CHAR,VARCHAR
    #string是char,varchar的集合 from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine # 创建父类 Base
    =declarative_base() # 创建表单 class User_Type(Base): __tablename__='usertype' # 表的名称 id = Column(Integer,primary_key=True,autoincrement=True)#主键加自增 title = Column(CHAR(20), nullable=True, index=True) class User(Base): __tablename__='user' id = Column(Integer , primary_key=True,autoincrement=True) name=Column(CHAR,nullable=False,index=True) email = Column(CHAR,nullable=False, unique=True) user_type_id = Column(Integer, ForeignKey('usertype.id'))#表名和列名 外键 __table_args__ = ( UniqueConstraint('id', 'name', name='uix_id_name'),#联合索引的名字 Index('ix_id_name', 'name', 'email'),#第一个是索引的名字 ) engine = create_engine("mysql+pymysql://root:@localhost:3306/review60?charset=utf8", max_overflow=5) # 表示最大连接数 Base.metadata.create_all(engine) #连接数据库,并且把所有的类当做列表创建的mysql里面

    删除表

    engine = create_engine("mysql+pymysql://root:@localhost:3306/review60?charset=utf8", max_overflow=5)  # 表示最大连接数
    Base.metadata.create_all(engine) #连接数据库,并且把所有的类当做列表删除

    一般由于创建和删除在函数中表少用,所以我们一般他给分装起来。要用的话直接调用就好。

    # 创建表
    def create_table():
        engine = create_engine("mysql+pymysql://root:@localhost:3306/review60?charset=utf8", max_overflow=5)  # 表示最大连接数
        Base.metadata.create_all(engine) #连接数据库,并且把所有的类当做列表创建的mysql里面
    # 删除表
    def drop_table():
        engine = create_engine("mysql+pymysql://root:@localhost:3306/review60?charset=utf8", max_overflow=5)  # 表示最大连接数
        Base.metadata.drop_all(engine)

    列表的操作

    engine = create_engine("mysql+pymysql://root:@localhost:3306/review60?charset=utf8", max_overflow=5)
    Session=sessionmaker(bind=engine) #绑定,创建会议
    session=Session()#我去,在sessionmaker里面的call方法返回得是个是个类,所以下面可以调用方法
    #
    obj=User_Type(title='普通用户')
    session.add(obj)
    obj=User_Type(title='白金用户')
    session.add(obj)
    obj=User_Type(title='铂金用户')
    session.add(obj)
    
    #
    a=session.query(User_Type).all() #查询所有
    for row in a :
        print(row.id,row.title)
    b=session.query(User.name,User.id,User.email).filter(User.id > 0).all(); #按条件筛选
    for i1,i2,i3 in b :
        print(i1,i2,i3)
    c=session.query(User.name,User.id,User.email).filter(User.id > 0).first();#按条件筛选且只选一个
    print(c) #由于只有一个直接得到列表
    #
    session.query(User_Type).filter(User_Type.title=='白金用户').update({'title':'黑铁用户'})
    session.query(User_Type).filter(User_Type.title=='黑铁用户').update({User_Type.title:'黄金用户'})
    session.query(User_Type).filter(User_Type.title=='黄金用户').update({'title':User_Type.title + "哈哈"}, synchronize_session=False)
    session.query(User).filter(User.email=='16363').update({User.id:User.id+99999},synchronize_session='evaluate')
    
    # 删除
    session.query(User).filter(User.id > 2).delete()
    
    
    
    session.commit()
    session.close()

    。  

  • 相关阅读:
    线程与进程
    进程间通信之信号量与信号灯
    进程间通信之消息队列
    进程间通信之共享内存
    进程间通信之信号
    进程间通信之管道
    软件需求分析
    团队介绍
    EF Core(1.DBFirst)
    7.基本方式调用Api(http api)
  • 原文地址:https://www.cnblogs.com/accolade/p/10662382.html
Copyright © 2011-2022 走看看