资讯专栏INFORMATION COLUMN

SQLAlchemy系列之一

Caizhenhao / 2227人阅读

整理了下以前学习SQLAlchemy的一些笔记,准备弄成一个系列来写,顺便巩固下自己的知识,好了,废话不多说了,让我们开始学习SQLAlchemy吧

在学SQLAlchemy之前,我们需要了解一个叫ORM的东西,

ORM,全称(Object Relational Mapping),中文称之为对象关系映射,通过ORM我们可以通过类的方式去操作数据库,而不用写原生的SQL语句,通过把表映射成类,把行作为示例,把字段作为属性,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句,让我们接下来说下使用ORM有哪些优点:

易用性:使用ORM做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观,清晰

性能损耗小:ORM转换成底层数据操作指令时确实有一些开销,但是从实际的情况来看,这种性能损耗很少(不足5%),只要不是对性能有严格的要求的,综合开发效率、代码的阅读性,带来的好处远远大于性能损耗,而且随着项目越来越大的时候作用更加的明显

设计灵活:可以轻松的写出复杂的查询

可移植性:SQLAlchemy封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的MySQL、postgreSQL和SQLite,可以非常轻松的切换数据库

好了,ORM就先介绍到这里,让我们回到今天的主题

SQLAlchemy:SQLAlchemy是一个数据库的ORM框架,可以通过pip install SQLAlchemy来安装我们的SQLAlchemy

接下来上代码

# 1.首先在本地创建一个数据库 
# 2.准备数据库的连接数据
# 因为数据库的不同,所以每种数据库的都有自己的连接方式,我用的是mysql的连接方式
DB_USERNAME = ""  # 数据库用户名
DB_PASSWORD = ""  # 数据库密码
DB_HOST=""        # 主机名
DB_PORT = ""      # 端口号 mysql 默认的是3306
DB_NAME = ""    # 数据库的名字

DB_URI = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)

# engine 创建引擎
engine = create_engine(DB_URI)

引擎创建好了以后我们要测试下是否成功连接到数据库,可以通过

with engine.connect() as con:
    rs = con.execute("select 1")
    print rs.fetchone()

如果打印出了(1L,),那就代表你已经成功的连接上了数据库,接下来我们将使用ORM创建类的方法来创建,废话不多说,上代码

# 1.必须先继承之sqlalchemy的某个基类
Base = declarative_base(engine)


# 创建一张user表,定义好一些属性与user表中的字段想映射
class UserModel(Base):
    # 提前设置好映射的表名
    __tablename__ = "users"

    id = Column(Integer,primary_key=True,autoincrement=True)
    username = Column(String(100),nullable=False)
    password = Column(String(100),nullable=False)

    def __repr__(self):
        # 这个纯属是为了打印的时候更加好看
        return "" % (self.id,self.username,self.password)

# 将创建好的User表提交到数据表中
Base.metadata.create_all()

这样就在我们是数据库中创建了一张users表了

然后我给大家介绍下SQLAlchemy常用的数据类型

Integer:整形,映射到数据库中的int类型

String:字符类型,映射到数据库中的varchar类型,使用时,需要提供一个字符长度

Boolean:布尔类型,映射到数据库中的bool类型,在使用的时候,传递True/False进去

Text:文本类型,映射到数据库中的text类型

Date:日期类型,没有时间。映射到数据库中是date类型,在使用的时候,传递datetime.date()进去

DateTime:日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传递datetime.datetime()进去

Float:浮点类型

Column类常用的参数

primary_key:主键,True和False

autoincrement:是否自动增长,True和False

unique:是否唯一

nullable:是否可空,默认是True

default:默认值

onupdate:在更新的时候,一般用在时间上面

好了,今天就先介绍到这里吧,下次带给大家的就是ORM
的增删查改

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44374.html

相关文章

  • Flask开发记录系列之一项目骨架

    第一步,完成项目骨架。 https://github.com/xbynet/flask-skeleton backend all the requirements show the bellow: Flask==0.11.1 Werkzeug==0.11.11 Jinja2==2.8 SQLAlchemy==1.1.2 celery==3.1.23 Flask-sqlalchemy==2.1 f...

    xiaoqibTn 评论0 收藏0
  • 通过demo学习OpenStack开发所需的基础知识 -- 数据库(1)

    摘要:另外,项目在单元测试中使用的是的内存数据库,这样开发者运行单元测试的时候不需要安装和配置复杂的数据库,只要安装好就可以了。而且,数据库是保存在内存中的,会提高单元测试的速度。是实现层的基础。项目一般会使用数据库来运行单元测试。 OpenStack中的关系型数据库应用 OpenStack中的数据库应用主要是关系型数据库,主要使用的是MySQL数据库。当然也有一些NoSQL的应用,比如Ce...

    warnerwu 评论0 收藏0
  • Flask 插件系列 - Flask-SQLAlchemy

    摘要:程序中最常用的莫过于关系型数据库了,也称数据库。对象是类的实例,表示程序使用的数据库。本文由发表于个人博客,采用自由转载保持署名非商用禁止演绎协议发布。非商业转载请注明作者及出处。本文标题为插件系列本文链接为更多阅读 简介 Web 开发中,一个重要的组成部分便是数据库了。Web 程序中最常用的莫过于关系型数据库了,也称 SQL 数据库。另外,文档数据库(如 mongodb)、键值对数据...

    LoftySoul 评论0 收藏0
  • flask-admin 快速打造博客 系列

    摘要:前言我想分享快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了。所以我主要集中在使用上的讲解。可我还是录了一套视频效果不是很好,稍后想分享给大家。 前言: 我想分享flask+flask-admin快速打造博客的详细教程,可是发现网易课堂已经有相应的免费课堂了,所以就不打算一点一滴的在这里做笔记,分享这些东西了。所以我主要...

    李世赞 评论0 收藏0

发表评论

0条评论

Caizhenhao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<