首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQLite 爬坑记

作为从零开始的Web开发人员,在项目开发中总是遇到这样那样的坑,其中数据库的坑最多。由于在功能完善过程中需要变换频繁,不可避免地要更改DB Schema,不过我都是能不改尽量不改。...故事是这样的,我要把两个表中的某两列的类型由字符型改成列表。在数据库值类型中就是BLOB,ORM中叫做PickleType。...数据库使用SQLite,ORM使用SQLAlchemy,并使用基于Alembic的自动化迁移工具,于是就开始了。 Round 1 直接开搞 migrate。。。咦?怎么脚本没生成?...Round 3 看来只能放弃自动化迁移了,Google一番,找到一个drop column的workaround:复制一个去掉该列的新表,并覆盖原表。...进数据库看看,新的列已经加上了,查了一下已有的关联列,没啥问题啊? LEAVE IT ALONE!管它了,跑起来,新增一行数据,Beng shaka laka!

55540

带你认识 flask 中的数据库

这个插件是Alembic的一个Flask封装,是SQLAlchemy的一个数据库迁移框架。使用数据库迁移增加了启动数据库时候的一些工作,但这对将来的数据库结构稳健变更来说,是一个很小的代价。...大多数情况下,主键都是数据库自动赋值的,我只需要提供id字段作为主键即可。...这是一个看起来相当艰巨的任务,为了实现它,Alembic维护一个数据库迁移存储库,它是一个存储迁移脚本的目录。每当对数据库结构进行更改后,都需要向存储库中添加一个包含更改的详细信息的迁移脚本。...要自动生成迁移,Alembic会将数据库模型定义的数据库模式与数据库中当前使用的实际数据库模式进行比较。然后,使用必要的更改来填充迁移脚本,以使数据库模式与应用程序模型匹配。...Alembic通过使用降级方法可以将数据库迁移到历史中的任何点,甚至迁移到较旧的版本。 flask db migrate命令不会对数据库进行任何更改,只会生成迁移脚本。

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    《Flask Web开发》学习笔记

    3,Flask支持动态url,在route装饰器中使用'/user/',尖括号的内容就是动态部分 4,Flask使用上下文临时把某些对象变为全局可访问,使用前要确保将其激活:【程序上下文全局变量...使用Flask的redirect(url_for('index')) *14,Flask的flash是核心特性:提醒用户的信息已经被更改 15,SQL数据库特点:列数固定、行数可变、特殊的列[主键]、表之间关联...;数据库会话能保证数据库的一致性 18,Flask-Migrate对Alembic迁移框架做了轻量包装,并集成到Flask-Script;Alembic是SQLAlchemy的主力开发人员编写的迁移框架...19,Flask-Migrate使用:配置、init创建迁移仓库、migrate自动构建迁移脚本(要检查迁移脚本)、upgrade提交到数据库中 20,Flask-Mail使用异步+Celery任务队列将邮件发送迁移到后台线程...()之后才能使用app.route装饰器;flask提供的blueprint蓝图,就是解决这个问题 23,蓝图机制:蓝图中定义的路由处于休眠状态,直到蓝图注册到程序中,路由才成为程序一部分 24,蓝图使用

    1.7K10

    Python 数据库迁移工具 Alembic

    Alembic 的应用 Alembic 使用 SQLAlchemy 作为数据库引擎,为关系型数据提供创建、管理、更改和调用的管理脚本,协助开发和运维人员在系统上线后对数据库进行在线管理。...然后使用自动生成迁移脚本命令,查看我们的配置是否完成。...,项目下不可避免的会生成很多版本的迁移脚本,此时可以使用 current 来查看线上数据库处于什么版本,也可以通过 history 来查看项目目录中的迁移脚本信息。...Flask-Migrate 是使用 Alembic 处理 Flask 应用中数据库「使用 SQLAlchemy ORM」迁移的扩展库。...其内置了 Click 命令行程序,在 Flask 上可直接使用命令行工具进行数据库的迁移。关于 Click 的使用请参考 Python 命令行神器 Click。

    3.5K10

    flask数据操纵

    unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default...为这列定义默认值 关系类型 选项 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值...,如果未查到,返回404 get() 返回指定主键对应的行,如不存在,返回None get_or_404() 返回指定主键对应的行,如不存在,返回404 count() 返回查询结果的数量 paginate...我们也想让Flask框架支持这样的操作,就需要使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Script中,所有操作通过命令就能完成。...生成迁移文件 python app.py db migrate -m 'first create' 提示: INFO [alembic.runtime.migration] Context impl

    1.3K10

    Flask中ORM框架之SQLAlchemy插件入门到弃坑

    答: 他是基于SQLAlchemy框架针对于Flask进行优化与封装的数据库框架, 可以帮助开发者快速进行应用开发与不同数据库之间的数据存储, 还能结合Flask-Migrate实现数据库的迁移与回滚;...Flask 的 app = Flask(__name__) 进行 SQLAlchemy 对象构建, 在开发过程中常常使用懒加载方法 init_app 方法进行扩展的加载使用; Step 3.配置数据库连接字符串说明与实例...#日期和时间 # 7.二进制类型 LargerBinary 2.字段选项 常用的SQLAlchemy中的列选项: 选项名 说明 primary_key 如果为True,代表表的主键 autoincrement...如果为Trye,表示该字段自增 unique 如果为True,代表这列不允许出现重复的值 index 如果为True,为这列创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为...False,不允许有空值 default 为这列定义默认值 Q: 模型中外键ForeignKey的构建?

    3.4K10

    Python Web - Flask笔记6

    先把两个需要做多对多的模型定义出来 使用Table定义一个中间表,中间表一般就是包含两个模型的外键字段就可以了,并且让他们两个来作为一个“复合主键”。...alembic的方式类似git,表现在: alembic所有的命令都以alembic开头; alembic的迁移文件也是通过版本进行控制的 安装 pip install alembic 使用alembic...alembic创建一个仓库:alembic init [仓库的名字,推荐使用alembic]。...注意事项:在终端中,如果想要使用alembic,则需要首先进入到安装了alembic的虚拟环境中,不然就找不到这个命令。 常用命令: init:创建一个alembic仓库。...解决办法:删除数据库的alembic_version表中的数据,重新执行alembic upgrade head 执行upgrade head时报某个表已经存在的错误: 原因:执行这个命令的时候,会执行所有的迁移脚本

    2K10

    4.alembic数据迁移工具

    alembic是用来做ORM模型与数据库的迁移与映射。...alembic使用方式跟git有点类似,表现在两个方面,第一个,alemibi的所有命令都是以alembic开头; 第二,alembic的迁移文件也是通过版本进行控制的。...安装方式:pip install alembic 1.1.alembic的使用  (1)定义模型 models.py from sqlalchemy import Column,Integer,String...:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数 head:代表当前的迁移脚本的版本号 downgrade:会执行指定版本的迁移文件中的downgrade函数 heads:展示当前可用的...   解决办法:删除数据的alembic_version表中的数据,重新执行alembic upgrade head 1.3.current命令使用介绍 用alembic工具:数据库中会自动生成一张表

    1.7K30

    数据库和ORMS:使用SQLAlchemy与数据库通信

    使用SQLAlchemy与SQL数据库通信 2.1 创建表 2.2 连接数据库 2.3 insert、select 2.4 update、delete 2.5 relationships 2.6 用Alembic...sqlalchemy.MetaData() # 创建元数据对象 posts = sqlalchemy.Table( # 创建表对象 'posts', # 表名 metadata, # 元数据对象 # 列对象...进行数据库迁移 pip install alembic 终端输入: alembic init alembic 初始化迁移环境,其中包括一组文件和目录,Alembic将在其中存储其配置和迁移文件,需要一起提交...alembic revision --autogenerate -m "Initial migration" 之后会生成一个py文件 该代码内有两个函数:upgrade,downgrade用于数据迁移和回滚...# 升级 alembic upgrade head 数据的迁移和升级之前请做好备份和测试,防止丢失损坏 https://alembic.sqlalchemy.org/en/latest/index.html

    1.1K20

    Flask 中的数据库迁移

    因为测试数据只有几条,所以可以使用删表重建的方式,但在实际的项目中,是不可能使用这种方式的,删表意味着删数据。...其中一个非常重要的依赖库是 Alembic ,数据库迁移时自动生成迁移文件和迁移脚本都是 Alembic 完成的,也是因为 Alembic 的机制,数据库迁移操作只能在 Linux 系统中使用,不能在...执行 upgrade 命令后,会在数据库中创建一张 alembic_version 表,这张表不是代码中定义的,是 Alembic 自动创建的(看名字就知道了),里面保存的是当前数据库的版本 id ,alembic_version...如果要在 Windows 中成功执行数据库迁移,就不能直接使用 Alembic 生成的迁移脚本,需要自己修改迁移脚本。...对数据库迁移后,可以使用 history 命令找到历史的版本号和变更过程。

    1.7K30

    Flask扩展使用笔记

    : 可以扩展路由 Flask-Migrate 扩展 描述:该扩展实现数据库字段模型迁移 在Flask中像Django中一样进行模型迁移,初始化使用app 和 db 进行初始化,同时也可以使用懒加载方法...) 调用: python xx.py db {command} 依托于SQLAlchemy进行数据库迁移,Flask从入门到精通之使用Flask-Migrate实现数据库迁移 在开发程序的过程中,你会发现有时需要修改数据库模型...因此,更新表的唯一方式就是先删除旧表,不过这样做会丢失数据库中的所有数据。更新表的更好方法是使用数据库迁移框架。...源码版本控制工具可以跟踪源码文件的变化,类似地,数据库迁移框架能跟踪数据库模式的变化,然后增量式的把变化应用到数据库中。...SQLAlchemy 的主力开发人员编写了一个迁移框架,称为Alembic(https://alembic.readthedocs.org/en/latest/index.html)。

    66120

    SqlAlchemy 2.0 中文文档(五十八)

    不幸的是,这破坏了第三方列类型,如 SQLModel 中未实现此特殊方法的 UUID/GUID 类型,引发错误“无法将结果集中的标志值与参数集匹配”。...这使得 Alembic 能够正确检测现有 MariaDB 数据库中此类列的类型。...()中,然后通过模型复制到模型会将每个约束的副本应用到生成的Table中的Column中,导致不正确的 CREATE TABLE DDL 以及在 Alembic 下的迁移指令。...不幸的是,这破坏了第三方列类型,如 SQLModel 中未实现此特殊方法的 UUID/GUID 类型,引发了错误“无法将结果集中的哨兵值与参数集匹配”。...,然后通过 pep-593 Annotated 复制到模型中时,将每个约束的副本应用到目标 Table 中的 Column,从而导致不正确的 CREATE TABLE DDL 以及 Alembic 下的迁移指令

    16710

    在flask中使用flask-migrate管理数据库

    Flask-Migrate是一个为Flask应用处理SQLAlchemy数据库迁移的扩展,使得可以通过Flask的命令行接口或者Flask-Scripts对数据库进行操作。...这个命令将会新建一个名字为migrations的文件夹,并且记录一个数据库版本号,一份保留在migrations中,一份保存在数据库中(新建一张名字为alembic_version的表来保存),值得注意大是新建了...migrations文件夹后需要对数据库模型进行修改,然后使用flask-migrations进行迁移,这样才产生第一个版本号。...迁移 flask db migrate 迁移脚本最好仔细审查并且按需编写,因为Alembic(flask-migrate的核心)不会检测模型所有大变化,可以参考这个链接,查看Alembic的限制。...如果不修改将使用默认策略迁移。 升级 flask db upgrade 每次数据库模型变化,需要重复使用migrate命令和upgrade命令(按顺序组合使用),使用成功后将修改版本号。

    1.8K41

    Google Cloud Spanner的实践经验

    接触Cloud Spanner 第一次接触到Google Cloud Spanner是因为客户对于新技术的追求与尝试,将我们基本完成的APIs从原先的Google Cloud Sql迁移到Cloud Spanner...在做这个决定的时候,客户考虑到当时公司用户数量处于激增的阶段,业务也在不断进行更改,所以需要对表结构也进行更改来满足业务的需求。...数据的分布是通过主键实现的,因此在选择主键的时候需要尽量防止Cloud Spanner服务的热点(Hotspots),时间戳或者自增的序列数字都会造成热点问题出现,Cloud Spanner推荐使用随机...将一个非主键列添加到任何表,新的非主键列不能为 NOT NULL。 将 NOT NULL 添加到非主键列,不包括 ARRAY 列。 从非主键列中移除 NOT NULL。...从任何表中删除非主键列,前提是二级索引未在使用该列。 将 STRING 列更改为 BYTES 列,或将 BYTES 列更改为 STRING 列。

    1.5K10

    记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

    需求背景   最近接到一个数据迁移的需求,旧系统的数据迁移到新系统;旧系统不会再新增业务数据,业务操作都在新系统上进行   为了降低迁移的影响,数据进行分批迁移,也就是说新旧系统会并行一段时间   数据分批不是根据...还真支持,如下所示   楼主平时使用 UPDATE 的时候,基本没结合 ORDER BY ,也没尝试过结合 LIMIT   这次尝试让楼主对 UPDATE 产生了陌生的感觉,它的完整语法应该是怎样的...更多关于 IGNORE 的信息,请查看:The Effect of IGNORE on Statement Execution   关于使用场景,在新旧系统并行,做数据迁移的时候可能会用到,主键或者唯一键冲突的时候直接忽略...一旦找到满足 WHERE 子句的 row_count 行,无论这些行是否实际更改,该语句都会立即停止   也是就说 LIMIT 限制的是 查阶段 ,与 更新阶段 没有关系 注意:与 SELECT 语法中的... NOT NULL ,非严格 SQL 模式下,将 name 设置成 NULL 是成功的,但更改的值并非 NULL ,而是 VARCHAR 类型的默认值: 空字符串('')   小结下     1、严格

    94510
    领券