SQLALchemy笔记

SQLALchemy笔记

使用SQLAlchemy去连接数据库:

使用SQLALchemy去连接数据库,需要使用一些配置信息,然后将他们组合成满足条件的字符串:

HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'first_sqlalchemy'
USERNAME = 'root'
PASSWORD = 'root'

# dialect+driver://username:password@host:port/database
DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

然后使用create_engine创建一个引擎engine,然后再调用这个引擎的connect方法,就可以得到这个对象,然后就可以通过这个对象对数据库进行操作了:

engine = create_engine(DB_URI)

# 判断是否连接成功
conn = engine.connect()
result = conn.execute('select 1')
print(result.fetchone())

ORM介绍:

  1. ORM:Object Relationship Mapping
  2. 大白话:对象模型与数据库表的映射

将ORM模型映射到数据库中:

  1. declarative_base根据engine创建一个ORM基类。
    from sqlalchemy.ext.declarative import declarative_base
    engine = create_engine(DB_URI)
    Base = declarative_base(engine)
    
  2. 用这个Base类作为基类来写自己的ORM类。要定义__tablename__类属性,来指定这个模型映射到数据库中的表名。
    class Person(Base):
        __tablename__ = 'person'
    
  3. 创建属性来映射到表中的字段,所有需要映射到表中的属性都应该为Column类型:
    class Person(Base):
        __tablename__ = 'person'
        # 2. 在这个ORM模型中创建一些属性,来跟表中的字段进行一一映射。这些属性必须是sqlalchemy给我们提供好的数据类型。
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(50))
        age = Column(Integer)
    
  4. 使用Base.metadata.create_all()来将模型映射到数据库中。
  5. 一旦使用Base.metadata.create_all()将模型映射到数据库中后,即使改变了模型的字段,也不会重新映射了。

用session做数据的增删改查操作:

  1. 构建session对象:所有和数据库的ORM操作都必须通过一个叫做session的会话对象来实现,通过以下代码来获取会话对象:
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine(DB_URI)
    session = sessionmaker(engine)()
    
  2. 添加对象:
    • 创建对象,也即创建一条数据:
      p = Person(name='zhiliao',age=18,country='china')
      
    • 将这个对象添加到session会话对象中:
      session.add(p)
      
    • 将session中的对象做commit操作(提交):
      session.commit()
      
    • 一次性添加多条数据:
      p1 = Person(name='zhiliao1',age=19,country='china')
      p2 = Person(name='zhiliao2',age=20,country='china')
      session.add_all([p1,p2])
      session.commit()
      
  3. 查找对象:
    # 查找某个模型对应的那个表中所有的数据:
    all_person = session.query(Person).all()
    # 使用filter_by来做条件查询
    all_person = session.query(Person).filter_by(name='zhiliao').all()
    # 使用filter来做条件查询
    all_person = session.query(Person).filter(Person.name=='zhiliao').all()
    # 使用get方法查找数据,get方法是根据id来查找的,只会返回一条数据或者None
    person = session.query(Person).get(primary_key)
    # 使用first方法获取结果集中的第一条数据
    person = session.query(Person).first()
    
  4. 修改对象:首先从数据库中查找对象,然后将这条数据修改为你想要的数据,最后做commit操作就可以修改数据了。
    person = session.query(Person)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值