SQLAlchemy学习笔记

来源:互联网 发布:vip会员管理系统php 编辑:程序博客网 时间:2024/06/06 05:35

1.    sqlalchemy.__version__ 获取版本号

2.    create_engine 用来创建一个数据库连接,其参数分别为’类型://root/password/地址.此方法返回的一个Engine实例,此时不会主动连接数据库,而回在执行命令的时候去尝试连接。如engine1.execute()或者engine1.connect().

3.    创建一个声明基类,用来定义与数据库表相对应的类。

4.          from sqlalchemy.ext.declarative import declarative_basebase1 = declarative_base()

5.    使用declarative定义类至少要一个tablename参数,一个Column参数(主键)。

from sqlalchemy import Column, Integer, String
class User(base1):
    __tablename__ = 'users'

   
id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __repr__(self):
        return "<User(name='%s', fullname='%s',password='%s')>"%(self.name,self.fullname, self.password)

6.         User.__table__此方法可以查看这个User表对象

7.          Base.metadata.create_all(engine),执行命令

8.     SQLite和Postgresql允许不指定长度,其他数据库则需要给定长度。如Column(String(50))

9.     Oracle和Firebird可以使用Sequence来指定一个主键

from sqlalchemy import SequenceColumn(Integer, Sequence('user_id_seq'), primary_key=True)

10.   ORM的数据库处理方式通过Session实现,当我们create_engine()的时候,我们同时应该创建一个Session

from sqlalchemy.orm import sessionmakerSession = sessionmaker(bind=engine1)

如果你在使用sessionmaker()的时候,没有一个engine对象,那么你可以先使用
Session = sessionaker()方法,当你创建一个engine的时候,然后使用configure来进行连接
Session.configure(bind=enginee)#once enginee is available
上面的Session没有与数据库链接,当第一次调用的时候才会建立一个与Engine维护的连接池连接,已知到我们关闭Session对象或者提交完所有的变化。

11. 存操作我们使用add()到会话中,比如

session1 = Session()ed_user = User(name='ed', fullname='Ed Jones', password='edpassword')session1.add(ed_user)

       此时此语句没有被执行,同时数据库也没有这行数据,Session会再需要的时候尽快持久化,这个过程叫flush。当我们在数据库查询Ed Jones,这个待定的信息会被flush,然后然查询请求被执行。

12. 可以使用add_all()函数来一次添加多个对象

session1.add_all([User(name='wendy', fullname='Wendy Williams', password='foobar'),   User(name='mary', fullname='Mary Contrary', password='xxg527'),                 User(name='fred', fullname='Fred Flinstone', password='blah')])

       ed_user.password= ‘f8s7ccs’,会话时刻注意这些变化

       session.dirty(ps.可以找到现在要做的修改,个人理解)

       session.new(ps.可以找到新的任务,个人理解)

13. session.commit()可以将所有的更改记录到数据库中,然后提交这个事务。Commit()函数

14. rolling back()函数,可以在一个会话事务里面起作用,比如
ed_user.name = ‘Edwardo

fake_user= User(name='fakeuser', fullname='Invalid', password='12345') >>>session.add(fake_user)

此时这些已经放到当前的事务中,包括name的修改,以及添加新的用户,我们session.roolback()一下,则将name改回去,新用户删掉(ps.不确定会回改多少)

15. 查询(Quering)通过Session里面的query()方法创建的

for instance insession.query(User).order_by(User.id):

        print(instance.name,instance.fullname)

       Query也可以接受类实体、基于列的实体作为query()的参数如

       Forname, fullname in session.query(User.name, User.fullname):

              Print(name,fullname)

16. lable()给一列起一个另外的称呼,起别名

for row in session.query(User.name.label(‘name_label’)).all():

        print(row.name_label)#输出的是User.name

 

原创粉丝点击