安装
$ easy_install sqlalchemy
定义表结构并初始化数据库
class Restaurant(Base):
# 表的名字:
__tablename__ = 'restaurant'
# 表的结构:
id = id = Column(Integer, primary_key=True)
restaurant_name = Column(String(100))
restaurant_address = Column(String(300))
#数据库添加一行记录
# 初始化数据库连接:
engine = create_engine('数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名')
# 创建对应column
# Base.metadata.create_all(engine)
# 创建DBSession类型:
DBSession = sessionmaker(bind=engine)
# 创建session对象:
session = DBSession()
# 创建新表对象:
new_user = Restaurant(restaurant_name=‘aa’, restaurant_address=‘bb’)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
#表的查询
result = session.query(Restaurant.restaurant_name, Restaurant.restaurant_address).all()
# 关闭session:
session.close()
可以利用Base.metadata.create_all(engine)来根据表结构在数据库自动创建对应的表以及对应的结构,不需要每次运行。想了解更多sqlalchemy的功能,大家可以再扩展了解下。
安装
$ pip3 install alembic
定义数据库结构
可参考Sqlalchemy的例子定义初始的数据库结构,将脚本文件保存为models.py
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
Base=declarative_base()
class Person(Base):
__tablename__='person'
person_id = sa.Column(sa.Integer, primary_key=True)
nickname = sa.Column(sa.String(64), nullable=False)
password = sa.Column(sa.String(16))
gender = sa.Column(sa.Integer)
birthday = sa.Column(sa.Date)
class Telephone(Base):
__tablename__='telephone'
tel_id = sa.Column(sa.Integer, primary_key =True)
person_id = sa.Column(sa.Integer,sa.ForeignKey('person.person_id'))
telphone_no = sa.Column(sa.String(64))
if __name__ == "__main__":
engine = sa.create_engine('mysql+mysqlconnector://XXX:xxxxx@ip:port/Test')
Base.metadata.create_all(engine)
初始化
在使用之前,在项目的根目录运行初始化命令
alembic init alembic
初始化完成后,你的项目目录会增加一个alembic.ini文件以及一个alembic目录。后一个alembic是个路径名称,是指版本管理的相关脚本存储的路径,可自定义。
首先修改一下alembic.ini文件,找到其中的sqlalchemy.url定义行,将其定义为你的数据库定义串:
sqlalchemy.url = mysql+mysqlconnector://XXX:xxxxx@ip:port/Test
修改alembic/env.py文件,找到target_metadata那一句前面添加如下语句,并修改target_metadata定义:
import os.path
import sys
sys.path.append(os.path.realpath('.'))
import models
target_metadata = models.Base.metadata
realname = sa.Column(sa.String(64))
idcard = sa.Column(sa.String(20))
在models.py所在目录下运行
alembic revision --autogenerate -m 'added two columns to person table'
在alembic/versions目录下会生成一个30c120c761d8_added_two_columns_to_person_table.py文件,内容就是版本升级和降级需要的操作。包括 upgrade和downgrade方法。
这些语句是自动生成的,检查确认下是不是你需要的东西,根据需要稍作修改
在models.py所在目录下运行:
alembic upgrade head
head指的是版本号,以例子中的生成的文件,版本号是30c120c761d8。运行后会发现数据库已经对应改变了
更新数据库
$ alembic upgrade 版本号
更新到最新版
alembic upgrade head
降级数据库
$ alembic downgrade 版本号
更新到最初版
alembic downgrade head
离线更新(生成sql)
alembic upgrade 版本号 --sql > migration.sql
从特定起始版本生成sql
alembic upgrade 版本一:版本二 --sql > migration.sql
查询当前数据库版本号
查看alembic_version表。
清除所有版本
将versions删掉,并删除alembic_version表