SQLAlchemy学习笔记(一)

作者: 嘿嘿_小于同学 | 来源:发表于2017-03-07 17:37 被阅读312次
前言:该笔记是本人学习SQLAlchemy官方文档整理得来。

查看SQLAlchemy版本

>>> import sqlalchemy
>>> sqlalchemy.__version__
'1.0.15'
>>>

连接数据库

本教程中我们将使用postgresql数据库,连接数据库我们使用create_engine():

>>> >>> from sqlalchemy import create_engine
>>> engine = create_engine('postgresql://ricky:passwd@localhost/my_db', echo=True)

关于SQLAlchemy连接不同的数据库的URL设置,请自行搜索。
echo参数是设置SQLAlchemy日志显示的快捷方式,这样我们在python命令行中执行的命令都会在下面显示出日志信息(这里我们能清楚看到只想的SQL语句详细内容)。如果我们不想看见执行的详细过程,可以将echo设置为False

create_engine()函数返回一个Engin的实例,代表着访问数据库的接口。

延迟连接

create_engine()第一次调用,它没有尝试去连接数据库,仅仅是当我们执行数据库操作时,才会去连接数据库。

定义映射

当我们在使用ORM的时候,数据库中的一张表对应着我们的一个类,我们使用declarative_base()创建一个基类。

>>> from sqlalchemy.ext.declarative import declarative_base
>>> Base = declarative_base()

现在我们有了一个基类Base,我们可以定义很多映射的类,先从一张完整的表格,名字为Users开始,一个新的User类将会映射到我们的那种表格上,在类中我们定义关于表格的详细信息。主要是表名、列名和数据类型。

>>> 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(naem=%s, fullname=%s, password=%s)>" % (self.name, self.fullname, self.password)
...

一个最简单的类需要一个__tablename__属性,和至少一行Column和一个外键primary key

Tip######

User类定义了一个__repr__()方法,但是这个是可选的,我们在这里定义是为了打印出类的对象的内容。

创建一个模型

通过声明系统,我们已经定义了我们表格的详细信息,我们可以通过__table__属性来看我们定义的类

>>> User.__table__
Table('users', MetaData(bind=None), 
Column('id', Integer(), table=<users>, primary_key=True, nullable=False), 
Column('name', String(), table=<users>), 
Column('fullname', String(), table=<users>), 
Column('password', String(), table=<users>), schema=None)

当我们定义了我们的类,声明系统使用一个Python的metaclass来执行其他任务,一旦这个类声明完成。
表的对象是一个更大的称为元数据集合的一个成员。当我们使用这个系统,可以使用这个对象.metadata属性声明我们基类的属性。

MetaData是一个注册表,当我们的数据库不存在一个users表格,我们可以使用MetaData去创建一个不存在的表格,我们调用MetaData.create_all()方法,Engine作为一个数据库的连接。

>>> Base.metadata.create_all(engine)
SELECT ...
PRAGMA table_info("users")
()
CREATE TABLE users (
    id INTEGER NOT NULL, name VARCHAR,
    fullname VARCHAR,
    password VARCHAR,
    PRIMARY KEY (id)
)
()
COMMIT
Minimal Table Descriptions vs. Full Descriptions

在上面的声明一个表中的列时,我们注意到列的数据类型为字符串,但是没有指定长度;在SQLite和PostgreSQL中这样的声明是合法的,但是在其他的数据库中是不允许的。所以,如果运行这个教程在洽谈的数据库中,可能会报错。最好我很使用下面的声明方式。

Column(String(50))

另外在Firebird和Oracle数据库中要求sequences去生成一个新的外键约束。你可以使用序列来构造。

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

完整的Table的定义为:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    name = Column(String(50))
    fullname = Column(String(50))
    password = Column(String(12))

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

创建一个映射的类的对象

我们来创建一个User的对象.

>>> ed_user = User(name='ricky', fullname='yuziyong', password='123')
>>> ed_user.name
'ricky'
>>> ed_user.password
'123'
>>> ed_user.fullname
'yuziyong'
>>> str(ed_user.id)
'None'

尽管我们没有特别在构造函数指定,但是id属性仍然产生了一个值None,当我们访问它,SQLAlchemy的工具通常会产生一个默认值。

待续。。。

相关文章

  • SQLAlchemy学习笔记(二)

    SQLAlchemy学习笔记(二) SQLAlchemy Core 现在我们可以连接到数据库了,接下来让我们看看如...

  • SQLAlchemy学习笔记(一)

    SQLAlchemy学习笔记(一) 为什么要使用SQLAlchemy? 将你的代码抽象出来不依赖与数据库的类型和某...

  • SQLAlchemy学习笔记(一)

    前言:该笔记是本人学习SQLAlchemy官方文档整理得来。 查看SQLAlchemy版本 连接数据库 本教程中我...

  • SQLAlchemy学习笔记

    SQLAlchemy学习笔记(版权所有,翻版必究) 一、实例化数据库链接session 参数 engine参数:D...

  • SQLAlchemy学习笔记

    from sqlalchemy import * engine=create_engine("mssql+pyms...

  • sqlalchemy学习笔记

    sqlalchemy学习笔记 最近学习到python中的数据库知识,找了一圈都没什么详细的资料,这里记录一下sql...

  • SQLAlchemy学习笔记

    SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操作...

  • 笔记02:sqlalchemy-连接MySQL

    sqlalchemy-连接MySQL 笔记03:sqlalchemy增删改查 连接数据库

  • flask-sqlalchemy笔记

    flask_sqlalchemy笔记 安装 可通过 pip安装: 数据库连接 跟 sqlalchemy 一样,定义...

  • SQLALchemy学习笔记(三)

    Tips:在命令行操作这个命令过程中,如果出现以下的错误,不要紧张,可能是session已经失效,可以重新创建一个...

网友评论

    本文标题:SQLAlchemy学习笔记(一)

    本文链接:https://www.haomeiwen.com/subject/vpwugttx.html