整理了下以前学习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 '<UserModel(id="%s",username="%s",password="%s")>' % (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
的增删查改
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。