AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77930390
Accepted
Dan Jaouen
Dan Jaouen
Asked: 2024-02-03 07:50:12 +0800 CST2024-02-03 07:50:12 +0800 CST 2024-02-03 07:50:12 +0800 CST

Hylang 和 SQLAlchemy:sqlalchemy.exc.ArgumentError:Mapper Mapper[Stream(stream)] 无法组装映射表“流”的任何主键列

  • 772

我试图让 Hylang 和 SQLAlchemy 合作,但我似乎做不到。我认为这与 Flask-SQLAlchemy 如何使用元类解析数据库模型有关,但我不能 100% 确定。defcolumn我尝试创建所有s (定义如下)的字典,但这给了我同样的错误。这是我的代码:

(require hyrule [assoc defmacro/g!])
(import os)
(import subprocess)
(import sys)
(import flask [Flask redirect render_template request url_for])
(import flask-sqlalchemy [SQLAlchemy])
(import flask-migrate [Migrate])

(setv app (Flask __name__))
(setv path (os.path.join (os.path.expanduser "~/dbs") "development.db"))
(assoc app.config "SQLALCHEMY_DATABASE_URI" f"sqlite:///{path}")
(assoc app.config "SQLALCHEMY_TRACK_MODIFICATIONS" False)
(setv db (SQLAlchemy app))
(setv migrate (Migrate app db))

(defmacro defcolumn [name _column type #* args]
  (if args
      `(do {~name (db.Column ~type #** {~@args})})
      `{~name (db.Column ~type)}))

(defclass Stream [db.Model]
  (defcolumn "id" db.Column db.Integer "primary_key" True)
  (defcolumn "name" db.Column (db.String 240) "unique" True "nullable" False)
  (defcolumn "url" db.Column (db.String 240) "unique" True "nullable" False)
  (defcolumn "currently-playing" db.Column db.Boolean "unique" False "default" False)
  (defcolumn "created" db.Column
    (db.DateTime :timezone True)
    "unique" False
    "default" (db.func.now))

  (defcolumn "updated" db.Column
    (db.DateTime :timezone True)
    "unique" False
    "default" (db.func.now))

  (defn __init__ [self name url currently-playing]
    (setv self.name name)
    (setv self.url url)
    (setv self.currently-playing currently-playing))

  (defn __repr__ [self]
    f"<Stream {self.name}>"))

这是错误。正如您所看到的,SQLAlchemy 没有primary_key从我传入的 kwargs 中获取密钥:

danieljaouen on Daniels-MBP at …/pi-radio-hy via main (?)
 hy app.hy
Traceback (most recent call last):
  File "/opt/homebrew/bin/hy", line 8, in <module>
    sys.exit(hy_main())
             ^^^^^^^^^
  File "<frozen runpy>", line 286, in run_path
  File "<frozen runpy>", line 98, in _run_module_code
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/danieljaouen/src/pi-radio-hy/app.hy", line 25, in <module>
    (defclass Stream [db.Model]
     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/flask_sqlalchemy/model.py", line 92, in __init__
    super().__init__(name, bases, d, **kwargs)
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/flask_sqlalchemy/model.py", line 144, in __init__
    super().__init__(name, bases, d, **kwargs)
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_api.py", line 196, in __init__
    _as_declarative(reg, cls, dict_)
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py", line 247, in _as_declarative
    return _MapperConfig.setup_mapping(registry, cls, dict_, None, {})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py", line 328, in setup_mapping
    return _ClassScanMapperConfig(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py", line 582, in __init__
    self._early_mapping(mapper_kw)
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py", line 369, in _early_mapping
    self.map(mapper_kw)
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/decl_base.py", line 1957, in map
    mapper_cls(self.cls, self.local_table, **self.mapper_args),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 2, in __init__
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/util/deprecations.py", line 281, in warned
    return fn(*args, **kwargs)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/mapper.py", line 853, in __init__
    self._configure_pks()
  File "/opt/homebrew/Cellar/hy/0.28.0/libexec/lib/python3.12/site-packages/sqlalchemy/orm/mapper.py", line 1637, in _configure_pks
    raise sa_exc.ArgumentError(
sqlalchemy.exc.ArgumentError: Mapper Mapper[Stream(stream)] could not assemble any primary key columns for mapped table 'stream'

这是我第一次尝试将应用程序从 Python 翻译为 Hylang,因此非常感谢这里的任何帮助。

sqlalchemy
  • 1 1 个回答
  • 18 Views

1 个回答

  • Voted
  1. Best Answer
    Kodiologist
    2024-02-03T07:57:26+08:002024-02-03T07:57:26+08:00

    我不熟悉 SQLAlchemy,但如果我正确遵循你的代码,形式

    (defcolumn "id" db.Column db.Integer "primary_key" True)
    

    扩展到

    (do {"id" (db.Column db.Integer #** {"primary_key" True})})
    

    这不太可能做任何有用的事情,因为您正在构建一个文字字典({"id" …})然后将其丢弃。也许您的意思是使用(setv "id" …)。

    • 1

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve