Skip to content

Commit 14e029f

Browse files
authored
Fix CSV import throwing 'no fetchall attribute' error and respect primary field order (baserow#4165)
Fix CSV import throwing 'no fetchall attribute' error and respect primary field order
1 parent c057d76 commit 14e029f

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

backend/src/baserow/contrib/database/rows/handler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1808,8 +1808,8 @@ def import_rows(
18081808
and not field_object["field"].read_only
18091809
]
18101810

1811-
# Sort by order then by id
1812-
fields.sort(key=lambda f: (f.order, f.id))
1811+
# Sort by primary first (descending), then by order, then by id
1812+
fields.sort(key=lambda f: (not f.primary, f.order, f.id))
18131813

18141814
for index, row in enumerate(data):
18151815
# Check row length

backend/src/baserow/contrib/database/table/queryset.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ def _as_sql():
2222

2323
def execute_sql(self, result_type):
2424
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
25+
if cursor is None:
26+
return []
2527
return [res[0] for res in cursor.fetchall()]
2628

2729

backend/tests/baserow/contrib/database/rows/test_rows_actions.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1313,3 +1313,61 @@ def test_can_undo_redo_update_rows_interesting_field_types(data_fixture):
13131313
)
13141314
) == [multi_select_option_2.id]
13151315
assert getattr(row_table_1, f"field_{formula_field.id}") == "New value"
1316+
1317+
1318+
@pytest.mark.django_db(transaction=True)
1319+
def test_import_rows_respects_primary_priority_sorting(data_fixture):
1320+
user = data_fixture.create_user()
1321+
database = data_fixture.create_database_application(
1322+
user=user, name="Sample database"
1323+
)
1324+
table = data_fixture.create_database_table(database=database, name="Sample table")
1325+
1326+
single_select = data_fixture.create_single_select_field(
1327+
table=table, name="Single select", order=4, primary=False
1328+
)
1329+
data_fixture.create_select_option(
1330+
field=single_select, value="A", color="dark-green", order=0
1331+
)
1332+
data_fixture.create_select_option(
1333+
field=single_select, value="B", color="light-blue", order=1
1334+
)
1335+
1336+
name_field = data_fixture.create_text_field(
1337+
table=table, name="Name", order=5, primary=True
1338+
)
1339+
1340+
text_field = data_fixture.create_text_field(
1341+
table=table, name="Text", order=8, primary=False
1342+
)
1343+
1344+
data_fixture.create_formula_field(
1345+
table=table,
1346+
name="Formula",
1347+
order=58,
1348+
formula="field('Text')",
1349+
formula_type="text",
1350+
internal_formula="field('Text')",
1351+
nullable=True,
1352+
recalculate=True,
1353+
)
1354+
1355+
data = [["N", "A", "text"]]
1356+
1357+
created_rows, error_report = ImportRowsActionType.do(
1358+
user,
1359+
table,
1360+
data={"data": data, "configuration": None},
1361+
progress=None,
1362+
)
1363+
1364+
assert error_report == {}
1365+
assert len(created_rows) == 1
1366+
1367+
row = created_rows[0]
1368+
model = table.get_model()
1369+
stored = model.objects.get(id=row.id)
1370+
1371+
assert getattr(stored, name_field.db_column) == "N"
1372+
assert getattr(stored, text_field.db_column) == "text"
1373+
assert getattr(stored, single_select.db_column).value == "A"
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"type": "bug",
3+
"message": "Fix CSV import throwing 'no fetchall attribute' error and respect primary field order",
4+
"domain": "database",
5+
"issue_number": 4163,
6+
"bullet_points": [],
7+
"created_at": "2025-11-05"
8+
}

0 commit comments

Comments
 (0)