我正在尝试构建一个系统,其中 SQL 参数会自动绑定到新查询。根据这个线程:
@、_ 和 # 字符应该允许在标识符中。所以我尝试将参数构建为:
:表名#字段名
但是当我做我得到错误:
PBdatabase.select_query: [1] DB[2] prepare() SELECT * FROM entity WHERE pk = :creature#pk [near "#pk": 语法错误]
似乎它不喜欢 # 字符,我尝试使用下划线,它似乎有效,但我已经在字段名称中使用了下划线。这就是为什么我想使用不同的字符。
由于上面的线程讨论了 SQL Server,SQLITE 中的受限字符可能会有所不同。我找到了 SQLITE 限制关键字列表,但没有找到字符。
有人知道我可以使用哪些其他特殊字符吗?
更新
有人想知道我这有什么用。这是一个示例,假设您有 2 个具有 1 到 N 关系的表:Fleet 包含船只。
您想显示一个由 2 个块组成的表格,其中顶部显示 1 个当时选定的舰队。底部区块列出了舰队中的所有船只。
第一个块查询将类似于:
SELECT pk, number, location FROM fleet;
Run Code Online (Sandbox Code Playgroud)
然后所选条目的字段将被放入具有以下名称的字段注册表中(假设 # 符号有效):
:fleet#pk
:fleet#number
:fleet#location
Run Code Online (Sandbox Code Playgroud)
然后将运行第二个块的第二个查询,包括上面的注册字段。所以查询看起来像:
SELECT pk, fk_fleet, name FROM ship WHERE fk_fleet = :fleet#pk
Run Code Online (Sandbox Code Playgroud)
此查询使用上述查询中的参数。标识符将被上一个查询中的值替换。这允许仅显示与上面选定的舰队相关联的船只,而不是所有可用的船只。
现在你们中的一些人可能会说我可以简单地保存我想要的变量并将它们作为参数传递给下一个查询。问题是所有查询都是从数据库加载的。我实际上不知道我要运行哪个查询以及我需要为另一个查询保存哪个值。相反,我将它们全部保存在注册表中,如果另一个 SQL 语句要求提供参数,则该值将可用。