Django psycopg2游标不存在
使用Postgres特定的ArrayField,我试图对ArrayFields的长度求和 这些查询在shell中可以正常工作,但在本地dev服务器上不能。我已经将错误缩小到第19行的最后一个注释:“annotate(total=Sum(“length”)”,因为它没有最后的.annotate(…).values(…)部分运行良好 我还运行了“makemigrations”和“migrate”,以便更新数据库 错误: psycopg2.errors.InvalidCursorName:光标“\u django\u curs\u 19180\u 1”不存在 光标“\u django\u curs\u 19180\u 1”不存在 调试输出:Django psycopg2游标不存在,django,postgresql,psycopg2,Django,Postgresql,Psycopg2,使用Postgres特定的ArrayField,我试图对ArrayFields的长度求和 这些查询在shell中可以正常工作,但在本地dev服务器上不能。我已经将错误缩小到第19行的最后一个注释:“annotate(total=Sum(“length”)”,因为它没有最后的.annotate(…).values(…)部分运行良好 我还运行了“makemigrations”和“migrate”,以便更新数据库 错误: psycopg2.errors.InvalidCursorName:光标“\u
('SELECT "product_design_assembledfromcomponent"."id", '
'"product_design_assembledfromcomponent"."assembled_id_id", '
'"product_design_assembledfromcomponent"."quantity", '
'"product_design_assembledfromcomponent"."designed_with_id_id", '
'"product_design_assembledfromcomponent"."position", '
'"product_design_assembledfromcomponent"."description", '
'"product_design_assembledfromcomponent"."assembled_inhouse", (SELECT '
'SUM(ARRAY_LENGTH(U0."position")) AS "total" FROM "product_design_multistep" '
'U0 WHERE U0."assembly_id" = ("product_design_assembledfromcomponent"."id") '
'GROUP BY U0."assembly_id" LIMIT 1) AS "taken" FROM '
'"product_design_assembledfromcomponent" WHERE '
'"product_design_assembledfromcomponent"."assembled_id_id" = %s')
The above exception (function array_length(character varying[]) does not exist LINE 1: ...edfromcomponent"."assembled_inhouse", (SELECT SUM(ARRAY_LENG... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ) was the direct cause of the following exception:
代码:
提前感谢您的帮助
编辑:添加的型号
1 class MultiStep(models.Model):
2 step = models.ForeignKey(ProductionStep, on_delete=models.PROTECT, null=True, blank=True)
3 assembly = models.ForeignKey(AssembledFromComponent, on_delete=models.PROTECT, null=True, blank=True)
4 quantity = models.DecimalField(decimal_places=6, max_digits=12, default=1)
5 position = ArrayField(
models.CharField(max_length=10, blank=True),
size=40,
blank=True,
null=True,
help_text="A subset of the set of positions defined for an assembly"
)
6 class AssembledFromComponent(models.Model):
7 # ID of the new component
8 assembled_id = models.ForeignKey(
9 DesignedComponent,
10 on_delete=models.PROTECT,
11 related_name='assembled_id'
12 )
13 quantity = models.DecimalField(decimal_places=6, max_digits=12)
14 # ID of a component used to make a new component
15 designed_with_id = models.ForeignKey(
16 DesignedComponent,
17 on_delete=models.PROTECT,
18 related_name='designed_with_id'
19 )
20 position = models.CharField(
21 max_length=200,
22 blank=True,
23 null=True,
24 help_text="Enter a single position or a comma separated list of positions with length = quantity"
25 )
26 description = models.TextField(
27 max_length=1000,
28 help_text='Enter a brief description of the assembly',
29 null=True,
30 blank=True,
31 )
32 assembled_inhouse = models.BooleanField(default=False)
Edit2:我将改为使MultiStep.position字段原子化,而不是使用ArrayField,这使问题变得不那么复杂
我仍然认为最初的问题很奇怪,因为在我看来,ArrayLength是不可求和的。从错误中可以看出,您的位置参数不是array类型,而是char类型
(function array_length(**character varying[]**) does not exist
函数只将数组类型作为参数位置字段是什么,而且了解更多关于模型的信息也会很有好处。似乎获取数组长度不是问题,而是求数组长度的和。至少代码运行良好,在不求和时给出数组长度。
(function array_length(**character varying[]**) does not exist