我正在尝试将属性映射到公式以选择值(如果该列是否存在,则为默认值)
我尝试了以下
AttributeError Traceback (most recent call last)
<ipython-input-63-6acaac7e556d> in <module>()
97 return model
98
---> 99 model = my_model([3, 32, 32], 10)
100 from keras.optimizers import Adam
101
24 frames
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in build_map(tensor, finished_nodes, nodes_in_progress, layer, node_index, tensor_index)
1323 ValueError: if a cycle is detected.
1324 """
-> 1325 node = layer._inbound_nodes[node_index]
1326
1327 # Prevent cycles.
AttributeError: 'NoneType' object has no attribute '_inbound_nodes'
我收到一个错误 SqlException:无效的列名'GroupId'。
答案 0 :(得分:0)
此SQL语句将返回名称为“ Azure”的所有表
select * from INFORMATION_SCHEMA.COLUMNS SYS_COLS_TBL
WHERE SYS_COLS_TBL.TABLE_NAME ='Azure'
AND SYS_COLS_TBL.COLUMN_NAME = 'GroupId'
但是,可能有两个这样的表格..但使用不同的 方案 。如果发生这种情况,我们可以在dbo.Azure
具有列SomeOtherSchema.Azure
的情况下查询GroupId
..这将解决它:
select * from INFORMATION_SCHEMA.COLUMNS SYS_COLS_TBL
WHERE SYS_COLS_TBL.TABLE_NAME ='Azure'
AND SYS_COLS_TBL.COLUMN_NAME = 'GroupId'
AND SYS_COLS_TBL.TABLE_SCHEMA = 'dbo'
此外,要支持更复杂的查询(JOIN关联),请删除 this _。:
代替:
then this_.GroupId else '' end)
使用:
then GroupId else '' end)
NHibernate将根据上下文提供适当的别名
答案 1 :(得分:0)
SQL语句要求确实存在对表和列的所有引用。因此,您会收到Invalid column name 'GroupId'
错误。
执行类似操作的通常方法是使用动态sql(sp_executesql @sql
):
DECLARE @sql NVARCHAR(MAX) = '
SELECT '+
(CASE WHEN EXISTS (SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo' AND --assuming the schema is dbo
TABLE_NAME = 'Azure' AND
COLUMN_NAME = 'GroupId'
)
then 'GroupId'
else 'NULL as GroupId'
end) + '
FROM Azure';
exec sp_executesql @sql
但是这不起作用,因为您已经在SQL语句的上下文中,并且无法在其中注入动态sql。
要解决此问题,有几种解决方法:
正确的解决方案:在数据库中创建缺少的列。
痛苦的解决方案:将对象映射到存储过程,该存储过程将执行与上述类似的动态SQL。
非常痛苦的解决方案:正常映射您可能缺少的列。在建立工厂之前-内省模型并为缺少的列删除映射或将其映射更改为公式。这与NHibernate的Configuration.ValidateSchema
方法类似,但是要避免抛出错误-您需要从映射中删除这些列。