mtsql 1.12.32__py3-none-any.whl → 1.12.33__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mt/sql/base.py +115 -0
- mt/sql/version.py +1 -1
- {mtsql-1.12.32.dist-info → mtsql-1.12.33.dist-info}/METADATA +3 -3
- {mtsql-1.12.32.dist-info → mtsql-1.12.33.dist-info}/RECORD +7 -7
- {mtsql-1.12.32.dist-info → mtsql-1.12.33.dist-info}/WHEEL +1 -1
- {mtsql-1.12.32.dist-info → mtsql-1.12.33.dist-info}/licenses/LICENSE +0 -0
- {mtsql-1.12.32.dist-info → mtsql-1.12.33.dist-info}/top_level.txt +0 -0
mt/sql/base.py
CHANGED
|
@@ -25,12 +25,14 @@ __all__ = [
|
|
|
25
25
|
"list_views",
|
|
26
26
|
"table_exists",
|
|
27
27
|
"create_temp_id_table",
|
|
28
|
+
"create_temp_id_tuple_table",
|
|
28
29
|
"create_temp_str_id_table",
|
|
29
30
|
"temp_table_name",
|
|
30
31
|
"temp_table_find_new_id",
|
|
31
32
|
"temp_table_drop",
|
|
32
33
|
"to_temp_table",
|
|
33
34
|
"find_common_ids",
|
|
35
|
+
"find_common_id_tuples",
|
|
34
36
|
"find_common_str_ids",
|
|
35
37
|
"remove_records_by_id",
|
|
36
38
|
"remove_records_by_str_id",
|
|
@@ -423,6 +425,65 @@ def create_temp_id_table(
|
|
|
423
425
|
return table_name
|
|
424
426
|
|
|
425
427
|
|
|
428
|
+
def create_temp_id_tuple_table(
|
|
429
|
+
la_ids: list,
|
|
430
|
+
n_cols: int,
|
|
431
|
+
conn: sa.engine.Connection,
|
|
432
|
+
int_type: str = "int",
|
|
433
|
+
chunksize: int = 1000000,
|
|
434
|
+
logger: tp.Optional[logg.IndentedLoggerAdapter] = None,
|
|
435
|
+
) -> str:
|
|
436
|
+
"""Creates a temporary table to containing a list of multi-column ids.
|
|
437
|
+
|
|
438
|
+
Parameters
|
|
439
|
+
----------
|
|
440
|
+
la_ids : list
|
|
441
|
+
list of fixed-sized arrays of ids to be inserted into the table. Each array must have
|
|
442
|
+
length equal to `n_cols`.
|
|
443
|
+
n_cols : int
|
|
444
|
+
number of columns in the id arrays
|
|
445
|
+
conn : sqlalchemy.engine.Connection
|
|
446
|
+
a connection that has been opened
|
|
447
|
+
int_type : str
|
|
448
|
+
an SQL string representing the int type
|
|
449
|
+
chunksize : int
|
|
450
|
+
maximum number of ids to be inserted in each INSERT statement
|
|
451
|
+
logger : mt.logg.IndentedLoggerAdapter, optional
|
|
452
|
+
logger for debugging
|
|
453
|
+
|
|
454
|
+
Returns
|
|
455
|
+
-------
|
|
456
|
+
table_name : str
|
|
457
|
+
name of the temporary table. The table will be deleted at the end of the connection
|
|
458
|
+
"""
|
|
459
|
+
|
|
460
|
+
if n_cols <= 1:
|
|
461
|
+
raise ValueError("n_cols must be greater than 1")
|
|
462
|
+
|
|
463
|
+
table_name = f"tab_{uuid.uuid4().hex}"
|
|
464
|
+
|
|
465
|
+
query_str = f"CREATE TEMP TABLE {table_name}("
|
|
466
|
+
query_str += ",".join((f"id{i+1} {int_type}" for i in range(n_cols)))
|
|
467
|
+
query_str += ");"
|
|
468
|
+
exec_sql(sa.text(query_str), conn, logger=logger)
|
|
469
|
+
|
|
470
|
+
while True:
|
|
471
|
+
la_ids2 = la_ids[:chunksize]
|
|
472
|
+
if len(la_ids2) == 0:
|
|
473
|
+
break
|
|
474
|
+
values = ",".join(
|
|
475
|
+
"(" + ",".join((str(id[i]) for i in range(n_cols))) + ")" for id in la_ids2
|
|
476
|
+
)
|
|
477
|
+
query_str = f"INSERT INTO {table_name}("
|
|
478
|
+
query_str += ",".join((f"id{i+1}" for i in range(n_cols)))
|
|
479
|
+
query_str += f") VALUES {values};"
|
|
480
|
+
exec_sql(sa.text(query_str), conn, logger=logger)
|
|
481
|
+
|
|
482
|
+
la_ids = la_ids[chunksize:]
|
|
483
|
+
|
|
484
|
+
return table_name
|
|
485
|
+
|
|
486
|
+
|
|
426
487
|
def create_temp_str_id_table(
|
|
427
488
|
l_ids: list,
|
|
428
489
|
conn: sa.engine.Connection,
|
|
@@ -596,6 +657,60 @@ def find_common_ids(
|
|
|
596
657
|
return l_commonIds
|
|
597
658
|
|
|
598
659
|
|
|
660
|
+
def find_common_id_tuples(
|
|
661
|
+
la_ids: tp.List[tp.List[int]],
|
|
662
|
+
id_cols: tp.List[str],
|
|
663
|
+
frame_name: str,
|
|
664
|
+
engine: sa.engine.Engine,
|
|
665
|
+
schema: tp.Optional[str] = None,
|
|
666
|
+
int_type: str = "int",
|
|
667
|
+
logger: tp.Optional[logg.IndentedLoggerAdapter] = None,
|
|
668
|
+
) -> tp.List[int]:
|
|
669
|
+
"""Finds common ids between a list of ids and the ids in a given frame.
|
|
670
|
+
|
|
671
|
+
Parameters
|
|
672
|
+
----------
|
|
673
|
+
la_ids : list of list of int
|
|
674
|
+
list of id tuples to be checked
|
|
675
|
+
id_cols : list of str
|
|
676
|
+
name of the id columns in the frame
|
|
677
|
+
frame_name : str
|
|
678
|
+
name of the frame to be checked against
|
|
679
|
+
engine : sqlalchemy.engine.Engine
|
|
680
|
+
connection engine to the server
|
|
681
|
+
schema : str, optional
|
|
682
|
+
schema of the frame. If None, the default schema is used.
|
|
683
|
+
id_cols : list of str
|
|
684
|
+
name of the id column in the frame
|
|
685
|
+
int_type : str
|
|
686
|
+
an SQL string representing the int type of the id column
|
|
687
|
+
logger : mt.logg.IndentedLoggerAdapter, optional
|
|
688
|
+
logger for debugging
|
|
689
|
+
|
|
690
|
+
Returns
|
|
691
|
+
-------
|
|
692
|
+
list of int
|
|
693
|
+
list of common ids
|
|
694
|
+
"""
|
|
695
|
+
|
|
696
|
+
with conn_ctx(engine) as conn:
|
|
697
|
+
temp_table = create_temp_id_table(l_ids, conn, int_type=int_type, logger=logger)
|
|
698
|
+
|
|
699
|
+
full_frame_name = frame_sql(frame_name, schema=schema)
|
|
700
|
+
|
|
701
|
+
sql = f"""
|
|
702
|
+
SELECT t.id FROM {temp_table} AS t
|
|
703
|
+
INNER JOIN {full_frame_name} AS f
|
|
704
|
+
ON t.id = f.{id_col};
|
|
705
|
+
"""
|
|
706
|
+
|
|
707
|
+
df_common = read_sql(sql, conn, index_col=None, logger=logger)
|
|
708
|
+
|
|
709
|
+
l_commonIds = df_common["id"].tolist()
|
|
710
|
+
|
|
711
|
+
return l_commonIds
|
|
712
|
+
|
|
713
|
+
|
|
599
714
|
def find_common_str_ids(
|
|
600
715
|
l_ids: tp.List[str],
|
|
601
716
|
frame_name: str,
|
mt/sql/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mtsql
|
|
3
|
-
Version: 1.12.
|
|
3
|
+
Version: 1.12.33
|
|
4
4
|
Summary: Extra Python modules to deal with the interaction between pandas dataframes and remote SQL servers, for Minh-Tri Pham
|
|
5
5
|
Home-page: https://github.com/inteplus/mtsql
|
|
6
6
|
Author: Minh-Tri Pham
|
|
@@ -12,8 +12,8 @@ Requires-Dist: tzlocal
|
|
|
12
12
|
Requires-Dist: tqdm
|
|
13
13
|
Requires-Dist: psycopg[binary]
|
|
14
14
|
Requires-Dist: redshift_connector>=2.1.5
|
|
15
|
-
Requires-Dist: mtbase>=4.
|
|
16
|
-
Requires-Dist: mtpandas>=1.17.
|
|
15
|
+
Requires-Dist: mtbase>=4.33.15
|
|
16
|
+
Requires-Dist: mtpandas>=1.17.20
|
|
17
17
|
Dynamic: author
|
|
18
18
|
Dynamic: home-page
|
|
19
19
|
Dynamic: license-file
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
mt/sql/__init__.py,sha256=b7zO50apZxt9Hg2eOkJhRLrXgACR8eS5b-Rphdn5qNQ,44
|
|
2
|
-
mt/sql/base.py,sha256=
|
|
2
|
+
mt/sql/base.py,sha256=HJzMlKO-SX3aLTMnOrvhrInfNi9O7WMD3tuV2yZIdJg,23863
|
|
3
3
|
mt/sql/mysql.py,sha256=n2ENDctdUqZuSaDAcrqZYtPtawq3Wx4dOPCRsCB5Q4w,4894
|
|
4
4
|
mt/sql/psql.py,sha256=U8XEyg4rQYr5gm8KohRWrpCNJKl5WC1yxJMBkkm1k_A,68125
|
|
5
5
|
mt/sql/sqlite.py,sha256=T2ak_hhNi_zRfpg_gp8JhNHn7D2kl4i-Ey6-9ANMtz0,8678
|
|
6
|
-
mt/sql/version.py,sha256=
|
|
6
|
+
mt/sql/version.py,sha256=3roEiAIfAeKb5dA-3ZmquKI_ZMs8TFD5x-PCcvQBLe4,208
|
|
7
7
|
mt/sql/redshift/__init__.py,sha256=S-eRxJWcrvncF7LZXuulCdPV-UERu9eiw6uyDb5aGsM,443
|
|
8
8
|
mt/sql/redshift/commands.py,sha256=xhGUBf3bL66EYdZI5HCUtOx-XqPCnXT_P-LnhPgtzrY,40193
|
|
9
9
|
mt/sql/redshift/ddl.py,sha256=eUcZj9oIajiE1wKKBAP-V64gYJ7cVnSAt8dLFfluOJA,9777
|
|
10
10
|
mt/sql/redshift/dialect.py,sha256=-0JjJubZZHRw0abhl6H6rKWaUE9pKtGwAuX-62T0e_c,53399
|
|
11
11
|
mt/sql/redshift/main.py,sha256=H8_5sjtJ7dzWoCMXzPNjYhrMQ18eLUQ9xg-aYl5QeTc,17104
|
|
12
12
|
mt/sql/redshift/redshift-ca-bundle.crt,sha256=532qYkOpQOstFE0mdXE1GVtL3v00XDKgZNTr6gK5-KE,8621
|
|
13
|
-
mtsql-1.12.
|
|
14
|
-
mtsql-1.12.
|
|
15
|
-
mtsql-1.12.
|
|
16
|
-
mtsql-1.12.
|
|
17
|
-
mtsql-1.12.
|
|
13
|
+
mtsql-1.12.33.dist-info/licenses/LICENSE,sha256=PojkRlQzTT5Eg6Nj03XoIVEefN3u8iiIFf1p4rqe_t4,1070
|
|
14
|
+
mtsql-1.12.33.dist-info/METADATA,sha256=MEQHkGnmBIr4lwNZrMKlCCbUNUOmprFJXE3a0xt5Slg,736
|
|
15
|
+
mtsql-1.12.33.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
16
|
+
mtsql-1.12.33.dist-info/top_level.txt,sha256=WcqGFu9cV7iMZg09iam8eNxUvGpLSKKF2Iubf6SJVOo,3
|
|
17
|
+
mtsql-1.12.33.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|