Skip to content

Commit bb53f89

Browse files
committed
style: make sql more compact
1 parent e16c710 commit bb53f89

File tree

3 files changed

+34
-23
lines changed

3 files changed

+34
-23
lines changed

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ await AccountMgr.select_custom_fields(
4949
Generate sql and execute
5050
```sql
5151
SELECT
52-
id, extend ->> '$.last_login.ipv4' ipv4, extend ->> '$.last_login.start_datetime' start_datetime, CAST(extend ->> '$.last_login.online_sec' AS SIGNED) online_sec
52+
id, extend ->> '$.last_login.ipv4' ipv4, extend ->> '$.last_login.start_datetime' start_datetime, CAST(extend ->> '$.last_login.online_sec' AS SIGNED) online_sec
5353
FROM account
5454
WHERE id IN (1,2,3) AND gender=1
5555
```
@@ -70,7 +70,7 @@ await AccountMgr.select_custom_fields(
7070
Generate sql and execute
7171
```sql
7272
SELECT
73-
locale, gender, COUNT(1) cnt
73+
locale, gender, COUNT(1) cnt
7474
FROM account
7575
WHERE `id` BETWEEN 1 AND 12
7676
GROUP BY locale, gender
@@ -123,9 +123,11 @@ await AccountMgr.upsert_on_duplicate(
123123
Generate sql and execute
124124
```sql
125125
INSERT INTO account
126-
(id, gender, name, locale, extend)
126+
(id, gender, name, locale, extend)
127127
VALUES
128-
(7, 1, '斉藤 修平', 'ja_JP', '{}'), (8, 1, 'Ojas Salvi', 'en_IN', '{}'), (9, 1, '羊淑兰', 'zh_CN', '{}')
128+
(7, 1, '斉藤 修平', 'ja_JP', '{}'),
129+
(8, 1, 'Ojas Salvi', 'en_IN', '{}'),
130+
(9, 1, '羊淑兰', 'zh_CN', '{}')
129131
AS `new_account` ON DUPLICATE KEY UPDATE name=`new_account`.name, locale=`new_account`.locale
130132
```
131133

@@ -146,7 +148,7 @@ await AccountMgr.insert_into_select(
146148
Generate sql and execute
147149
```sql
148150
INSERT INTO account_bak
149-
(gender, locale, active, name, extend)
151+
(gender, locale, active, name, extend)
150152
SELECT gender, CASE id WHEN 3 THEN 'zh_CN' WHEN 4 THEN 'en_US' WHEN 5 THEN 'fr_FR' ELSE '' END locale, False active, CONCAT(LEFT(name, 26), ' [NEW]') name, '{}' extend
151153
FROM account
152154
WHERE `id` IN (4,5,6)
@@ -169,8 +171,9 @@ Generate sql and execute
169171
UPDATE account
170172
JOIN (
171173
SELECT * FROM (
172-
VALUES
173-
ROW(7, False, 1), ROW(15, True, 0)
174+
VALUES
175+
ROW(7, False, 1),
176+
ROW(15, True, 0)
174177
) AS fly_table (id, active, gender)
175178
) tmp ON account.id=tmp.id
176179
SET account.active=tmp.active, account.gender=tmp.gender

fastapi_esql/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from logging.config import dictConfig
22

3+
from tortoise.queryset import Q
4+
35
from .const import (
46
QsParsingError,
57
WrongParamsError,
@@ -18,7 +20,7 @@
1820
timing,
1921
)
2022

21-
__version__ = "0.0.6"
23+
__version__ = "0.0.7"
2224

2325
__all__ = [
2426
"QsParsingError",
@@ -28,6 +30,7 @@
2830
"BaseModel",
2931
"CursorHandler",
3032
"Cases",
33+
"Q",
3134
"RawSQL",
3235
"SQLizer",
3336
"Singleton",

fastapi_esql/utils/sqlizer.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def select_custom_fields(
134134

135135
sql = """
136136
SELECT
137-
{}
137+
{}
138138
FROM {}
139139
WHERE {}
140140
{}""".format(
@@ -196,26 +196,31 @@ def upsert_on_duplicate(
196196
raise WrongParamsError("Please check your params")
197197

198198
values = [
199-
f"({', '.join(cls.sqlize_value(d.get(f)) for f in insert_fields)})"
199+
f" ({', '.join(cls.sqlize_value(d.get(f)) for f in insert_fields)})"
200200
for d in dicts
201201
]
202202
# NOTE Beginning with MySQL 8.0.19, it is possible to use an alias for the row
203203
# https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
204204
if using_values:
205205
upserts = [f"{field}=VALUES({field})" for field in upsert_fields]
206-
on_duplicated = f"ON DUPLICATE KEY UPDATE {', '.join(upserts)}"
206+
on_duplicate = f"ON DUPLICATE KEY UPDATE {', '.join(upserts)}"
207207
else:
208208
new_table = f"`new_{table}`"
209209
upserts = [f"{field}={new_table}.{field}" for field in upsert_fields]
210-
on_duplicated = f"AS {new_table} ON DUPLICATE KEY UPDATE {', '.join(upserts)}"
210+
on_duplicate = f"AS {new_table} ON DUPLICATE KEY UPDATE {', '.join(upserts)}"
211211

212-
sql = f"""
213-
INSERT INTO {table}
214-
({", ".join(insert_fields)})
212+
sql = """
213+
INSERT INTO {}
214+
({})
215215
VALUES
216-
{", ".join(values)}
217-
{on_duplicated}
218-
"""
216+
{}
217+
{}
218+
""".format(
219+
table,
220+
", ".join(insert_fields),
221+
",\n".join(values),
222+
on_duplicate,
223+
)
219224
logger.debug(sql)
220225
return sql
221226

@@ -240,7 +245,7 @@ def insert_into_select(
240245

241246
sql = f"""
242247
INSERT INTO {to_table or table}
243-
({", ".join(fields)})
248+
({", ".join(fields)})
244249
SELECT {", ".join(remain_fields + assign_fields)}
245250
FROM {table}
246251
WHERE {cls.resolve_wheres(wheres, model)}"""
@@ -259,22 +264,22 @@ def build_fly_table(
259264

260265
if using_values:
261266
rows = [
262-
f"ROW({', '.join(cls.sqlize_value(d.get(f)) for f in fields)})"
267+
f" ROW({', '.join(cls.sqlize_value(d.get(f)) for f in fields)})"
263268
for d in dicts
264269
]
265-
values = "VALUES\n " + ", ".join(rows)
270+
values = "VALUES\n" + ",\n".join(rows)
266271
table = f"fly_table ({', '.join(fields)})"
267272
else:
268273
rows = [
269274
f"SELECT {', '.join(f'{cls.sqlize_value(d.get(f))} {f}' for f in fields)}"
270275
for d in dicts
271276
]
272-
values = " UNION ".join(rows)
277+
values = " " + "\n UNION ".join(rows)
273278
table = "fly_table"
274279

275280
sql = f"""
276281
SELECT * FROM (
277-
{values}
282+
{values}
278283
) AS {table}"""
279284
logger.debug(sql)
280285
return sql

0 commit comments

Comments
 (0)