Issue 5105: sqlite3.Row class, handling duplicate column names resulting from a SQL join (original) (raw)

Created on 2009-01-29 23:53 by sockonafish, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Messages (4)
msg80798 - (view) Author: Brandon Adams (sockonafish) Date: 2009-01-29 23:53
When using sqlite3.Row as the row_factory for a sqlite3 connection and performing a SQL join that returns rows from two or more tables with identical column names, the returned sqlite3.Row object contains duplicate keys. Subsequently, when trying to access values by key, only the value contained in the lowest numbered index matching the key is returned. Additionally, attempting to use the keys returned to create a new table in the database fails due to a duplicate column name error. A better behavior would be for the sqlite3.Row object's indices to be prefixed with table names for cases in which a query produces results from two or more tables.
msg80847 - (view) Author: Gabriel Genellina (ggenellina) Date: 2009-01-31 01:34
I think this is a sqlite issue, not a Python one. cursor.description should return unique column names.
msg80849 - (view) Author: Gabriel Genellina (ggenellina) Date: 2009-01-31 02:22
See http://www.sqlite.org/cvstrac/tktview?tn=3221 Try upgrading to the latest sqlite release. Or set "pragma full_column_names=ON;" import sqlite3 conn = sqlite3.connect(':memory:') cursor = conn.cursor() cursor.execute("create table T (a, b, c)") cursor.execute("insert into T values (1, 2, 3)") cursor.execute("insert into T values (2, 3, 4)") conn.commit() cursor.execute("pragma short_column_names=OFF;") cursor.execute("pragma full_column_names=ON;") cursor.execute("select * from T T1, T T2 where T1.a=T2.b") print [d[0] for d in cursor.description] # output: ['T1.a', 'T1.b', 'T1.c', 'T2.a', 'T2.b', 'T2.c']
msg80853 - (view) Author: Brandon Adams (sockonafish) Date: 2009-01-31 03:51
Ah, that's it. Thanks for the tip, this issue can be closed now.
History
Date User Action Args
2022-04-11 14:56:45 admin set github: 49355
2009-02-05 14:16:46 georg.brandl set status: open -> closedresolution: works for me
2009-01-31 03:51:02 sockonafish set messages: +
2009-01-31 02:22:11 ggenellina set messages: +
2009-01-31 01:34:51 ggenellina set nosy: + ggenellinamessages: +
2009-01-29 23:53:29 sockonafish create