Skip to content

Commit 1a63bd6

Browse files
committed
feat: add to_table to insert_into_select
1 parent 7ee3ff8 commit 1a63bd6

File tree

5 files changed

+10
-9
lines changed

5 files changed

+10
-9
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,12 @@ await AccountMgr.insert_into_select(
131131
"name": RawSQL("CONCAT(LEFT(name, 26), ' [NEW]')"),
132132
"extend": {},
133133
},
134+
to_table="account_bak",
134135
)
135136
```
136137
Generate sql and execute
137138
```sql
138-
INSERT INTO account
139+
INSERT INTO account_bak
139140
(gender, locale, active, name, extend)
140141
SELECT gender, locale, False active, CONCAT(LEFT(name, 26), ' [NEW]') name, '{}' extend
141142
FROM account

examples/service/routers/account.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ async def bulk_init_view():
8383
}
8484
}
8585
})
86-
# logger.debug(dicts)
8786
ok = await AccountMgr.bulk_create_from_dicts(
8887
dicts,
8988
batch_size=5,
@@ -144,7 +143,6 @@ async def bulk_upsert_view():
144143
"locale": locale.value,
145144
"extend": {},
146145
})
147-
logger.debug(dicts)
148146
row_cnt = await AccountMgr.upsert_on_duplicated(
149147
dicts,
150148
insert_fields=["id", "gender", "name", "locale", "extend"],
@@ -165,6 +163,7 @@ async def bulk_clone_view(
165163
"name": RawSQL("CONCAT(LEFT(name, 26), ' [NEW]')"),
166164
"extend": {},
167165
},
166+
to_table="account_bak",
168167
)
169168
return {"ok": ok}
170169

fastapi_esql/orm/base_manager.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,14 @@ async def insert_into_select(
119119
wheres: Union[str, Q, Dict[str, Any], List[Q]],
120120
remain_fields: List[str],
121121
assign_field_dict: Dict[str, Any],
122+
to_table: Optional[str] = None,
122123
):
123124
sql = SQLizer.insert_into_select(
124125
cls.table,
125126
wheres,
126127
remain_fields,
127128
assign_field_dict,
129+
to_table,
128130
cls.model,
129131
)
130132
return await CursorHandler.exec_if_ok(sql, cls.rw_conn, logger)

fastapi_esql/utils/cursor_handler.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ async def fetch_dicts(
1616
try:
1717
return await conn.execute_query_dict(sql)
1818
except Exception as e:
19-
logger.exception(e)
19+
logger.exception(f"{e} SQL=>{sql}")
2020
return None
2121

2222
@classmethod
@@ -30,7 +30,7 @@ async def sum_row_cnt(
3030
row_cnt, _ = await conn.execute_query(sql)
3131
return row_cnt
3232
except Exception as e:
33-
logger.exception(e)
33+
logger.exception(f"{e} SQL=>{sql}")
3434
return None
3535

3636
@classmethod
@@ -44,5 +44,5 @@ async def exec_if_ok(
4444
await conn.execute_script(sql)
4545
return True
4646
except Exception as e:
47-
logger.exception(e)
47+
logger.exception(f"{e} SQL=>{sql}")
4848
return False

fastapi_esql/utils/sqlizer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ def upsert_on_duplicated(
159159
f"({', '.join(cls._sqlize_value(d.get(f)) for f in insert_fields)})"
160160
for d in dicts
161161
]
162-
# logger.debug(values)
163162
new_table = f"`new_{table}`"
164163
upserts = [f"{field}={new_table}.{field}" for field in upsert_fields]
165164

@@ -180,6 +179,7 @@ def insert_into_select(
180179
wheres: Union[str, Q, Dict[str, Any], List[Q]],
181180
remain_fields: List[str],
182181
assign_field_dict: Dict[str, Any],
182+
to_table: Optional[str] = None,
183183
model: Optional[Model] = None,
184184
) -> Optional[str]:
185185
if not all([table, wheres] or not any([remain_fields, assign_field_dict])):
@@ -190,10 +190,9 @@ def insert_into_select(
190190
for k, v in assign_field_dict.items():
191191
fields.append(k)
192192
assign_fields.append(f"{cls._sqlize_value(v)} {k}")
193-
# logger.debug(assign_fields)
194193

195194
sql = f"""
196-
INSERT INTO {table}
195+
INSERT INTO {to_table or table}
197196
({", ".join(fields)})
198197
SELECT {", ".join(remain_fields + assign_fields)}
199198
FROM {table}

0 commit comments

Comments
 (0)