SQLAlchemy 快速入门、基础知识

时间:2022-01-15 14:33:01

## SQLAlchemy 是Python 编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具。

SQLAlchemy 至少需要3部分代码,

  • 定义表
  • 定义数据库连接
  • 进行增、删、改、查等逻辑操作

'Hello World'入门

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

from sqlalchemy import Column, Integer, String
class User(Base):
__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)

*** 注意 ***
以上的例子来自SQLAlchemy 官网,数据库用的是SQLite,没有长度限制的字符串是有效的数据类型,但在MySql中则

不然,此时可以使用String的带参数形式,如String(10)来实现指定长度。

关键点解释

  • 首先导入sqlalchemy.ext.declarative,declarative_base,并定义它的实例。所有表必须继承自Base。之所以这样,可以看原版英文

    When using the ORM, the configurational process starts by describing the database tables we’ll be dealing with, and then by defining our own classes which will be mapped to those tables. In modern SQLAlchemy, these two tasks are usually performed together, using a system known as Declarative, which allows us to create classes that include directives to describe the actual database table they will be mapped to.
    之后利用Base 定义了一个User类

  • 使用==tablename==属性定义了表在数据库中实际的名称users
  • 引入sqlalchemy包中的Column、Intege、String类型,定义User表的数据列。

定义数据库连接

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

db_connect_string='sqlite://'

engine = create_engine(db_connect_string)
SessionType = scoped_session(sessionmaker(bind=engine,expire_on_commit=False))
def GetSession():
return SessionType()

from contextlib import contextmanager
@contextmanager
def session_scope():
session = GetSession()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()

代码解析

  • 引入数据库和会话引擎:sqlalchemy.create_engine,sqlalchemy.orm.scoped_session,sqlalchemy.orm.sessionmaker
  • 定义数据库连接需要用到的字符串。
  • 用create_engine建立数据库引擎。
  • 使用上下文管理器定义的scoped_session,建立会话。

  • 为了使之后的数据库操作的代码能够自动进行事务处理,定义了上下文函数session_scope()。在Python中定义上下文函数的方法
    是为其加入contextlib包中的contextmanager装饰器。在上下文函数中执行如下逻辑:在函数开始时建立数据库会话,此时会自动建立一个数据库事务;
    当发生异常是回滚事务;当退出时关闭连接。在关闭连接时会自动进行事务处理*

查询条件设置

待续

关系操作

待续

级联

待续