issue_comments: 1174027079
This data as json
html_url | issue_url | id | node_id | user | created_at | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
https://github.com/simonw/sqlite-utils/issues/449#issuecomment-1174027079 | https://api.github.com/repos/simonw/sqlite-utils/issues/449 | 1174027079 | IC_kwDOCGYnMM5F-jtH | 1690072 | 2022-07-04T17:33:04Z | 2022-07-04T17:48:43Z | CONTRIBUTOR | I've written the code and test. Would you be able to advise how to compare table columns in a pytest function properly? Experiencing a challenge when comparing columns. Test: ```python def test_duplicate(fresh_db): table = fresh_db.create_table( "table1", { "text_col": str, "float_col": float, "int_col": int, "bool_col": bool, "bytes_col": bytes, "datetime_col": datetime.datetime, }, ) dt = datetime.datetime.now() b = bytes('hello world', 'utf-8') data = {"text_col": "Cleo", "float_col": 3.14, "int_col": -2, "bool_col": True, "bytes_col": b, "datetime_col": str(dt)} table1 = fresh_db["table1"] row_id = table1.insert(data).last_rowid table1.duplicate('table2') table2 = fresh_db["table2"] assert data == table2.get(row_id) assert table1.columns == table2.columns # FAILS HERE ``` Result: ![Screenshot 2022-07-05 at 1 31 55 AM](https://user-images.githubusercontent.com/1690072/177198814-daac48c9-5746-49d0-a14a-14fe181c5a2f.png) Failure is due to column types being named differently -- e.g. 'FLOAT' vs 'REAL', 'INTEGER' vs 'INT'. How should I go about comparing columns while accounting for equivalent types? Or did I miss out something in my duplication code correctly? Here's how I did it: in `db.py`, I've added the following code: ```python class Table(Queryable): [...] def duplicate( self, name_new: str ) -> "Table": """ Duplicate this table in this database. :param name_new: Name of new table. """ assert self.exists() with self.db.conn: sql = "CREATE TABLE [{new_table}] AS SELECT * FROM [{table}];".format( new_table = name_new, table = self.name, ) self.db.execute(sql) return self.db[name_new] ``` | {"total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0} | 1279863844 |