基础学习——sqlalchemy入门

SQLAlchemy 教程 —— 基础入门篇


二、ORM 与 SQLAlchemy 简介
ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射。简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。

SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

先安装 SQLAlchemy:

$ sudo apt-get update
$ sudo pip3 install sqlalchemy # 安装过程中出现的一些警告不影响接下来的实验。


三、连接与创建

$ sudo vim /etc/mysql/my.cnf
通过上面的命令打开 MySQL 的配置文件, 添加下面几个配置:

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8

[mysql]
default-character-set = utf8
保存退出。现在我们可以启动 MySQL 服务了:

$ sudo service mysql start
在命令行下输入下面命令启动 MySQL:

$ mysql -uroot -p


看到上面的内容就说明我们的 MySQL 可以正常启动了(注意,上面的密码不需要输入内容,直接回车就行), 并且我们通过命令:

> create database blog;
创建一个名为 blog 的数据库为下面的使用作准备,后面的所有操作都是在 blog 中进行的。

另外,我们需要安装一个 Python 与 MySQL 之间的驱动程序:

$ sudo pip3 install pymysql
3.1 连接数据库
我们在 /home/shiyanlou/Code 目录下新建 db.py 文件,并向其中写入如下内容:

# coding: utf-8

from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://root@localhost:3306/blog')

print(engine)
在上面的程序中,我们连接了默认运行在 3306 端口的 MySQL 中的 blog 数据库。

运行下这个程序,看到下面的信息说明我们已经连接成功了: 

3.2 描述表结构
要使用 ORM, 我们需要将数据表的结构用 ORM 的语言描述出来。SQLAlchmey 提供了一套 Declarative 系统来完成这个任务。我们以创建一个 users 表为例,看看它是怎么用 SQLAlchemy 的语言来描述的:

# coding: utf-8

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer


engine = create_engine('mysql+pymysql://root@localhost:3306/blog?charset=utf8')
Base = declarative_base()


class User(Base):

    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String(64), nullable=False, index=True)
    password = Column(String(64), nullable=False)
    email = Column(String(64), nullable=False, index=True)


    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)

Base.metadata.create_all(engine)    
我们看到,在 User 类中,用 __tablename__ 指定在 MySQL 中表的名字。我们创建了三个基本字段,类中的每一个 Column 代表数据库中的一列,在 Colunm 中,指定该列的一些配置。第一个字段代表类的数据类型,上面我们使用 String, Integer 俩个最常用的类型,其他常用的包括:

Text
Boolean
SmallInteger
DateTime
nullable=False 代表这一列不可以为空,index=True 表示在该列创建索引。

另外定义 __repr__ 是为了方便调试,你可以不定义,也可以定义的更详细一些。

$ python3 db.py
运行程序,程序不会有输出信息,但是 sqlalchemy 已经在 MySQL 数据库里面为我们创建了 users 表。

可以进入 MySQL,运行图片中的命令看看表是如何创建的:

四、关系定义
关系型数据库表一表之间的关系主要分为一对多关系、一对一关系、多对多关系,下面我们将结合普通的博客应用给大家详细讲解下,各个表之间的关系如何定义。

4.1 一对多关系
对于一个普通的博客应用来说,用户和文章显然是一个一对多的关系,一篇文章属于一个用户,一个用户可以写很多篇文章࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值