Flask-SQLAlchemy 小写索引 - 跳过功能,SQLAlchemy 反射不支持

2024-03-13

首先。如果这个问题已经得到解答,我深表歉意,但我在任何地方都找不到答案。

我需要在 Flask-SQLAlchemy 对象上定义一个小写索引。

我遇到的问题是我需要将模型用户名和电子邮件字段存储为小写,以便我可以检查它们User.query.filter(func.lower(username) == func.lower(username)).first()

到目前为止,我一直通过仅将这些字段以小写形式插入来处理这个问题,但在这个特定的实例中,我需要用户名来保留它定义的大小写。

我认为我走在正确的轨道上,但遇到了一个我以前从未见过的问题。

class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    # Indexes for username and email are defined below User
    # They are functional lowercase indexes
    username = db.Column(db.String(32))
    email = db.Column(db.String(255))
    password_hash = db.Column(db.String(255))

    ...

db.Index('ix_users_username', func.lower(User.username), unique=True)
db.Index('ix_users_email', func.lower(User.email), unique=True)

我看不出这有什么问题。我猜测func.lower()要求索引的定义与我通过其他搜索所能得知的内容分开。

现在问题来了,当我运行迁移时,出现以下错误:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'users'
.../lib/python3.4/site-packages/alembic/util/messaging.py:69: UserWarning: autogenerate skipping functional index ix_users_email; not supported by SQLAlchemy reflection
  warnings.warn(msg)
.../lib/python3.4/site-packages/alembic/util/messaging.py:69: UserWarning: autogenerate skipping functional index ix_users_username; not supported by SQLAlchemy reflection

我不是 100% 确定为什么反射不支持这一点。我期望在迁移中它会像以前一样添加它们,但将其包裹在 lower 中。

我并不反对手动编写迁移(因为我假设它是可能的,但不是 100% 确定如何),但有人能指出为什么这不能开箱即用吗?

提前致谢 乔

Update

我通过在迁移中添加以下行解决了这个问题。

op.create_index('ix_users_username', 'users', [sa.text('lower(username)')])
op.create_index('ix_users_email', 'users', [sa.text('lower(email)')])

你需要添加UNIQUE INDEX手动使用alembic的execute方法。将类似的内容添加到您的迁移脚本中。

from alembic import op
# ...

def upgrade():
    # ...
    op.execute(
        """ CREATE UNIQUE INDEX users_normalized_username
            ON users
            (lower(username))
        """
    )

def downgrade():
    # ...
    op.execute("DROP INDEX users_normalized_username")

您还可以添加一个ColumnProperty所以你可以访问的标准化表示username.

from sqlalchemy import Column, String, func, orm

class User(Base):
    __tablename__ = 'users'

    username = Column(String(32))
    normalized_username = orm.column_property(func.lower(username))

    # ...

这不会在您的数据库中创建额外的列,但您将能够对其进行查询和比较。

session.query(User).filter(User.normalized_username == func.lower(username)).first()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-SQLAlchemy 小写索引 - 跳过功能,SQLAlchemy 反射不支持 的相关文章

  • SQLAlchemy 中 mssql+pyodbc 出现“数据源名称太长”错误

    我正在尝试使用 SQLAlchemy 和 pyodbc 将数据帧上传到 Azure SQL Server 数据库上的数据库 我已建立连接 但上传时出现错误 pyodbc Error IM010 IM010 Microsoft ODBC 驱动
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • 如何在 Pandas Python 中按 id 对行进行排名

    我有一个像这样的数据框 id points1 points2 1 44 53 1 76 34 1 63 66 2 23 34 2 44 56 我想要这样的输出 id points1 points2 points1 rank points2
  • 由于键更改而尝试插入时外键约束失败

    我有一个 Content 对象 它引用多对多关系中的一组 Tag 对象 作为持久化新内容对象的一部分 我在 PostgreSQL 中查看标签是否已存在 如果存在 则将对其的引用添加到内容对象并尝试保存内容对象 我遇到的问题是 当我这样做时
  • pyCUDA无法打印结果

    最近 我使用 pip 为我的 python3 4 3 安装 pyCUDA 但我在测试示例代码时发现 https documen tician de pycuda tutorial html getting started https doc
  • Python 不考虑 distutils.cfg

    我已经尝试了给出的所有内容 并且所有教程都指向相同的方向 即使用 mingw 作为 python 而不是 Visual C 中的编译器 我确实有 Visual C 和 mingw 当我想使用 pip 安装时 问题开始出现 它总是给Unabl
  • Scrapy 文件管道不下载文件

    我的任务是构建一个可以下载所有内容的网络爬虫 pdfs 在给定站点中 Spider 在本地计算机和抓取集线器上运行 由于某种原因 当我运行它时 它只下载一些但不是全部的 pdf 通过查看输出中的项目可以看出这一点JSON 我已经设定MEDI
  • 将整数系列转换为交替(双元)二进制系列

    我不知道如何最好地表达这个问题 因为在这里谷歌搜索和搜索总是让我找到更复杂的东西 我很确定这是基本的东西 但对于我的生活来说 我找不到一个好的方法来做到这一点下列 给定一个整数序列 比如说 for x in range 0 36 我想将这些
  • NSUserNotificationCenter.defaultUserNotificationCenter() 使用 PyInstaller 返回 None

    我正在尝试将通知发送到通知中心 Mac OSX 我正在使用 PyObjC 绑定来使用我们的 python 应用程序中的 cocoa api 我正在使用以下代码片段 import Foundation import objc NSUserNo
  • 获取 Keras model.summary() 作为表

    我在 Keras 中创建了相当大的模型 我正在用 LaTeX 写一篇关于它的文章 为了很好地描述 LaTeX 中的 keras 模型 我想用它创建一个 LaTeX 表 我可以手动实现它 但我想知道是否有任何 更好 的方法来实现这一点 我四处
  • 在 Python 中从 Excel 复制 YEARFRAC() 函数

    因此 我使用 python 来自动执行一些必须在 Excel 中执行的重复任务 我需要做的计算之一需要使用yearfrac 这在Python中被复制了吗 I found this https lists oasis open org arc
  • multiprocessing.Queue 中的 ctx 参数

    我正在尝试使用 multiprocessing Queue 模块中的队列 实施 https docs python org 3 4 library multiprocessing html exchang objects Between p
  • 使用会话在 Django 中将文件从一个视图传递到另一个视图

    我当前的工作项目要求我允许用户上传各种格式的文件 目前仅处理 CSV 格式 然后使用包含的数据来绘制图表Pandas http pandas pydata org 图书馆 我决定将图形渲染到模板的最简单方法是为图形创建特定视图 然后将图像从
  • Eclipse/PyDev 中未使用导入警告,尽管已使用

    我正在我的文件中导入一个绘图包 如下所示 import matplotlib pyplot as plt 稍后我会在我的代码中成功使用此导入 fig plt figure figsize 16 10 然而 Eclipse 告诉我 未使用的导
  • 如何将 URL 添加到 Telegram Bot 的 InlineKeyboardButton

    我想制作一个按钮 可以从 Telegram 聊天中在浏览器中打开 URL 外部超链接 目前 我只开发了可点击的操作按钮 update message reply text Subscribe to us on Facebook and Te
  • 将 Django 中的所有视图限制为经过身份验证的用户

    我是 Django 新手 我正在开发一个项目 该项目有一个登录页面作为其索引和一个注册页面 其余页面都必须仅限于登录用户 如果未经身份验证的用户尝试访问这些页面 则必须将他 她重定向到登录页面 我看到 login required装饰器会将
  • 检查 IP 地址是否在给定范围内

    我想检查一下是否有IP180 179 77 11位于特定范围之间 例如180 179 0 0 180 179 255 255 我编写了一个函数 它将每个 IP 八位字节与其他八位字节进行比较 def match mask IP min ip
  • 为 Rails 上的 postgresql 创建用户

    我选择 postgresql 作为我的 Rails 数据库 但当我尝试运行 rake db create all 时 我遇到了一个明显常见的错误 即 致命 角色 app 不存在 我找到了两种解决方案 但我不确定哪一种是正确的 有一个网站说
  • PyObjC + Python 3.0 问题

    默认情况下 Cocoa Python 应用程序使用默认的 Python 运行时版本 2 5 如何配置我的 Xcode 项目以便它使用较新的 Python 3 0 运行时 我尝试用新版本替换项目中包含的Python framework 但它不
  • 使用 python 将 CSV 文件上传到 Microsoft Azure 存储帐户

    我正在尝试上传一个 csv使用 python 将文件写入 Microsoft Azure 存储帐户 我已经发现C sharp https blogs msdn microsoft com jmstall 2012 08 03 convert

随机推荐

  • 为什么我在后台运行脚本时会得到“暂停(tty 输入)”的信息

    我写了一个tcsh脚本来清除集群中的垃圾数据 代码是 set hosts 1 set clear path 2 foreach i hosts rsh i rm rvf clear path end 当我在后台运行此脚本时 如下所示 dis
  • 如何查找两个 JavaScript 对象数组之间的差异?

    我有两个 JavaScript 数组orig 原始对象数组 和update 更新后的对象原始数组 具有相同的长度并包含对象 我想输出每对对象之间的差异 Example var orig enabled true name Obj1 id 3
  • 如何将 unicode 字符发送到活动应用程序?

    我需要 Windows API 中的 SendInput 之类的东西 我看到这个方法 我不知道有什么办法可以将unicode字符转换为虚拟键码 CGEventRef CGEventCreateKeyboardEvent CGEventSou
  • Neo4j 2 和 Java 8

    Java 8 将于本周发布 当将 Neo4j 1 9 与 Java 7 一起使用时 我们看到弹出警告 提示仅支持 6 但我们对 1 9 7 组合从未遇到任何问题 我知道 Neo4j 2 不能使用低于 Java 7 的任何东西 但是 Neo4
  • 禁用键盘 :: TextInput React Native

    下面给出的代码在第一次和第二次点击时有效 在相同的文本输入上它不起作用 键盘再次打开 因为文本输入已经聚焦 并且我正在使用自定义数字按钮进行输入 TextInput onFocus Keyboard dismiss 有什么建议么 原生反应的
  • HTML5 中是否可以实现类似 Photoshop 的混合模式?

    我想放一个红色矩形 div 元素在我的网页上 这样它不仅看起来是透明的 而且就像在 Photoshop 的乘法模式中混合的一样 The div 将有position fixed 所以下面的内容会很快改变 任何 HTML5 CSS3 canv
  • 自动打开第一张 Fancybox 图片

    单击链接后 我将从 JSON get 中引入一些图像 然后单击其中一张图片时可以显示图库 但我希望第一张图像立即出现 作为一旦JSON 已加载 这可能吗 我的代码是 json get css cursor pointer click fun
  • 在 tr 上使用 :hover 时出现 CSS 边框问题

    我试图在数据表中突出显示鼠标所在的行 我正在尝试用 border top 和 border bottom 来做到这一点 为了提高可读性 我还在交替行上放置了一个浅色透明的 png 似乎当我打开和关闭边框 适用于 IE8 和 FF 时 行会稍
  • 如何将 PHYLIP 格式转换为 FASTA

    我刚刚开始使用 perl 我有一个问题 我有 PHYLIP 文件 我需要将其转换为 FASTA 我开始写剧本 首先 我删除了行中的空格 现在我需要对齐所有行 每行应包含 60 个氨基酸 并且序列标识符应打印在新行中 也许有人可以给我一些建议
  • 时间耦合与工作单元

    所以 正如一直以来向我指出 https stackoverflow com questions 16148924 value types inferred as object at runtime when using dynamic 16
  • Node.js console.log 是否有长度限制?

    Node js 中 console log 输出的长度有限制吗 下面的代码打印 56462 之前的数字 然后停止 出现此问题是因为我们从 MySQL 返回数据集 并且输出将在 327k 个字符后退出 var out for i 0 i lt
  • 从 C# 运行 Bash 命令

    我试图弄清楚如何从在 IIS 7 Net 4 5 上运行的 C 运行 bash 命令 我一直在网上搜索 很多答案都假设您已经安装 就位了某些东西 我已经有了Git 1 9 4 msysgit 2与 Git Bash 和 Git Giu 一起
  • 如何列出 iOS 中开放的端口?

    我正在使用一个 已越狱设备 我想要写一个应用程序列出打开的端口 例如 TCP 端口 我有两个想法 使用一些本机 API 获取打开的端口列表 执行 shell 命令以获取打开的端口列表并解析此 shell 命令的结果 我应该使用哪个 API
  • 如何在 recyclerview 上设置 OnClickListener 而不取决于位置

    我希望 onclicklistener 方法打开与对象相关的活动 entidad1 entidad2 或 entidad3 MainActivity java 上的 OnRecipe 方法 我希望它能够实现 如果 entidad1 出现 它
  • 根据插入时间从 std::map 中删除元素

    我需要根据插入时间 或其他比这更有效的方法 从 std map 中删除元素 该地图可能会包含数千个元素 如果我存储时间并迭代地图以检查每个元素的时间 那么最终可能会非常耗时 有谁知道如何在 std map 变老时删除它们 The std m
  • double 是否会使方程中的每个 int 都加倍?

    是否存在一种浮点数据类型 例如double 确保所有 等数学运算都假定双操作数 如果故事比这更复杂 是否有描述这些规则的资源 我是否应该不问这样的问题并始终明确地投射int to double当方程的结果是double 这是我正在考虑的一些
  • 首次加载时仅加载一次广告 (div)

    我想知道如何才能让一个 div 具有要加载的广告或仅在第一次加载页面时可见 但每次刷新页面时隐藏它 我只有用 Jquery 加载 div 的代码 但不知道刷新页面后如何隐藏它 document ready function referral
  • UINavigationBar自定义过渡动画

    我使用以下协议在视图控制器之间创建了自定义转换 UIViewControllerAnimatedTransitioning and UIViewControllerTransitioningDelegate 是否可以使用默认的UINavig
  • 是什么让这两个数组相加不同?

    我用它来获取用户输入并清理代码 我试图解决这个问题 然后代码停止工作 这有效 BindVar array BindVar Email BindVar pass 然而 这并没有 BindVar array Email pass 这是当我更改该
  • Flask-SQLAlchemy 小写索引 - 跳过功能,SQLAlchemy 反射不支持

    首先 如果这个问题已经得到解答 我深表歉意 但我在任何地方都找不到答案 我需要在 Flask SQLAlchemy 对象上定义一个小写索引 我遇到的问题是我需要将模型用户名和电子邮件字段存储为小写 以便我可以检查它们User query f