AnswerDotAI / AnswerDotAI/sqlite-minutils

Foreign keys are not compatible with @cache

Abierto
#15 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
17
Forks
9
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

```python
schema = {'department': {'id': int, 'name': str},
'students': {'columns': {'id': int, 'name': str, 'department_id': str},
'foreign_keys': ['department_id']},
'professors': {'columns': {'id': int, 'name': str, 'department_id': str},
'foreign_keys': ['department_id']},
'classes': {'columns': {'id': int, 'name': str, 'department_id': str},
'foreign_keys': ['department_id']}}

db = database(DB)
for t in db.table_names(): db.t[t].drop()

for t,meta in schema.items():
cs = meta.get('columns', meta)
fks = meta.get('foreign_keys')
db.create_table(t, cs, pk='id', foreign_keys=fks)
```

We get the error
```
TypeError Traceback (most recent call last)
Cell In[3], line 16
14 if isinstance(fks, L): fks = list(fks)
15 print(fks)
---> 16 db.create_table(t, cs, pk='id', foreign_keys=fks)

File /opt/miniconda3/lib/python3.12/site-packages/sqlite_minutils/db.py:976, in Database.create_table(self, name, columns, pk, foreign_keys, column_order, not_null, defaults, hash_id, hash_id_columns, extracts, if_not_exists, replace, ignore, transform, strict)
974 self.execute(sql)
975 foreign_keys = self.resolve_foreign_keys(name, foreign_keys) if foreign_keys is not None else None
--> 976 created_table = self.table(
977 name,
978 pk=pk,
979 foreign_keys=foreign_keys,
980 column_order=column_order,
981 not_null=not_null,
982 defaults=defaults,
983 hash_id=hash_id,
984 hash_id_columns=hash_id_columns,
985 )
986 return cast(Table, created_table)

TypeError: unhashable type: 'list'
```

because self.table is @cache decorated and foreign keys are a list

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza en sqlite_minutils/db.py, en Database.create_table y en la llamada self.table mostrada en el traceback; reproduce el ejemplo pasando foreign_keys como una lista e inspecciona los argumentos almacenados en caché. Se considera terminado cuando la creación de las tablas acepta foreign_keys con valores de lista sin producir el TypeError indicado.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
python
Área
database
Tipo de issue
Error
Dificultad
2/5
Tiempo estimado
1-3 horas
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.