MySQLX 2.2.4__tar.gz → 2.2.6__tar.gz

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.
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mysqlx
3
- Version: 2.2.4
4
- Summary: A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions. It also provides ORM operations for single tables.
3
+ Version: 2.2.6
4
+ Summary: A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions.
5
5
  Home-page: https://gitee.com/summry/mysqlx
6
6
  Author: summy
7
7
  Author-email: xiazhongbiao@126.com
@@ -115,7 +115,24 @@ Usage Sample
115
115
  # (3, 'zhangsan', 15)
116
116
 
117
117
  # you can direct execute sql with db
118
- effected_rowcount = db.insert(table='user', name='zhaoliu', age=66)
118
+ effected_rowcount = db.table('person').insert(name='zhangsan', age=15)
119
+ # 1
120
+
121
+ primary_key = db.table('person').save(name='lisi', age=26)
122
+ # 4
123
+
124
+ effected_rowcount = db.insert(table='user', name='wangwu', age=38)
125
+ # 1
126
+
127
+ users = db.table('user').columns('id, name, age').select()
128
+ # result:
129
+ # (3, 'zhangsan', 15)
130
+ # (4, 'lisi', 26)
131
+ # (5, 'wangwu', 38)
132
+
133
+ users = db.table('user').columns('id, name, age').where(name='zhangsan').query()
134
+ # result:
135
+ # [{'id': 3, 'name': 'zhangsan', 'age': 15}]
119
136
 
120
137
  users = db.select('select id, name, age from user')
121
138
  # result:
@@ -136,25 +153,25 @@ Transaction
136
153
 
137
154
  .. code:: python
138
155
 
139
- from mysqlx import with_transaction, transaction
156
+ from mysqlx import trans
140
157
 
141
- @with_transaction
158
+ @trans
142
159
  def test_transaction():
143
160
  insert_func(....)
144
161
  update_func(....)
145
162
 
146
163
 
147
164
  def test_transaction2():
148
- with transaction():
165
+ with trans():
149
166
  insert_func(....)
150
167
  update_func(....)
151
168
 
152
- You can generate model class with mysqlx-generator: https://pypi.org/project/sqlormx
169
+ If you want to use ORM, may be you need SQLORMX: https://pypi.org/project/sqlormx
153
170
 
154
171
  If you want to operate PostgreSQL database, may be you need PgSqlx: https://pypi.org/project/pgsqlx
155
172
 
156
- If you just wanted a simple sql executor, may be you need sqlx-exec: https://pypi.org/project/sqlexecx
173
+ If you just wanted a simple sql executor, may be you need SQLExecX: https://pypi.org/project/sqlexecx
157
174
 
158
- If you wanted simultaneously support MySQL and PostgreSQL, may be you need sqlx-batis: https://pypi.org/project/batisx
175
+ If you wanted simultaneously support MySQL and PostgreSQL, may be you need BatisX: https://pypi.org/project/batisx
159
176
 
160
177
 
@@ -101,7 +101,24 @@ Usage Sample
101
101
  # (3, 'zhangsan', 15)
102
102
 
103
103
  # you can direct execute sql with db
104
- effected_rowcount = db.insert(table='user', name='zhaoliu', age=66)
104
+ effected_rowcount = db.table('person').insert(name='zhangsan', age=15)
105
+ # 1
106
+
107
+ primary_key = db.table('person').save(name='lisi', age=26)
108
+ # 4
109
+
110
+ effected_rowcount = db.insert(table='user', name='wangwu', age=38)
111
+ # 1
112
+
113
+ users = db.table('user').columns('id, name, age').select()
114
+ # result:
115
+ # (3, 'zhangsan', 15)
116
+ # (4, 'lisi', 26)
117
+ # (5, 'wangwu', 38)
118
+
119
+ users = db.table('user').columns('id, name, age').where(name='zhangsan').query()
120
+ # result:
121
+ # [{'id': 3, 'name': 'zhangsan', 'age': 15}]
105
122
 
106
123
  users = db.select('select id, name, age from user')
107
124
  # result:
@@ -122,23 +139,23 @@ Transaction
122
139
 
123
140
  .. code:: python
124
141
 
125
- from mysqlx import with_transaction, transaction
142
+ from mysqlx import trans
126
143
 
127
- @with_transaction
144
+ @trans
128
145
  def test_transaction():
129
146
  insert_func(....)
130
147
  update_func(....)
131
148
 
132
149
 
133
150
  def test_transaction2():
134
- with transaction():
151
+ with trans():
135
152
  insert_func(....)
136
153
  update_func(....)
137
154
 
138
- You can generate model class with mysqlx-generator: https://pypi.org/project/sqlormx
155
+ If you want to use ORM, may be you need SQLORMX: https://pypi.org/project/sqlormx
139
156
 
140
157
  If you want to operate PostgreSQL database, may be you need PgSqlx: https://pypi.org/project/pgsqlx
141
158
 
142
- If you just wanted a simple sql executor, may be you need sqlx-exec: https://pypi.org/project/sqlexecx
159
+ If you just wanted a simple sql executor, may be you need SQLExecX: https://pypi.org/project/sqlexecx
143
160
 
144
- If you wanted simultaneously support MySQL and PostgreSQL, may be you need sqlx-batis: https://pypi.org/project/batisx
161
+ If you wanted simultaneously support MySQL and PostgreSQL, may be you need BatisX: https://pypi.org/project/batisx
@@ -1,8 +1,6 @@
1
1
  from sqlexecx import (
2
- connection,
3
- transaction,
4
- with_connection,
5
- with_transaction,
2
+ conn,
3
+ trans,
6
4
  get_connection,
7
5
  close,
8
6
  Driver,
@@ -0,0 +1,159 @@
1
+ from typing import List, Tuple
2
+ from . import sql_support
3
+ # Don't remove. Import for not repetitive implementation
4
+ from sqlexecx import insert, save, batch_insert, batch_execute, do_execute, do_save_sql, do_get, do_query,\
5
+ do_query_one, do_select, do_select_one, do_select_page, do_query_page, do_select_page, do_query_page, \
6
+ load, do_load, insert_from_csv, insert_from_df, insert_from_json, truncate_table, drop_table, table
7
+
8
+
9
+ def execute(sql: str, *args, **kwargs):
10
+ """
11
+ Execute sql return effect rowcount
12
+
13
+ Examples
14
+ --------
15
+ >>> from mysqlx import db
16
+ >>> sql = 'INSERT INTO person(name, age) VALUES(?, ?)'
17
+ >>> db.execute(sql, '张三', 20)
18
+ 1
19
+ >>> sql = 'INSERT INTO person(name, age) VALUES(:name, :age)'
20
+ >>> db.execute(sql, name='张三', age=20)
21
+ 1
22
+ """
23
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.execute', sql, *args, **kwargs)
24
+ return do_execute(sql, *args)
25
+
26
+
27
+ def get(sql: str, *args, **kwargs):
28
+ """
29
+ Execute select SQL and expected one int and only one int result, SQL contain 'limit'.
30
+
31
+ MultiColumnsError: Expect only one column.
32
+
33
+ Examples
34
+ --------
35
+ >>> from mysqlx import db
36
+ >>> sql = 'SELECT count(1) FROM person WHERE name=? and age=? LIMIT 1'
37
+ >>> db.get(sql, '张三', 20)
38
+ 1
39
+ >>> sql = 'SELECT count(1) FROM person WHERE name=:name and age=:age LIMIT 1'
40
+ >>> db.get(sql, name='张三', age=20)
41
+ 1
42
+ """
43
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.get', sql, *args, **kwargs)
44
+ return do_get(sql, *args)
45
+
46
+
47
+ def query(sql: str, *args, **kwargs) -> List[dict]:
48
+ """
49
+ Execute select SQL and return list results(dict).
50
+
51
+ Examples
52
+ --------
53
+ >>> from mysqlx import db
54
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=?'
55
+ >>> db.query(sql, '张三', 20)
56
+ [{'id': 3, 'name': '张三', 'age': 20}]
57
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age '
58
+ >>> db.query(sql, name='张三', age=20)
59
+ [{'id': 3, 'name': '张三', 'age': 20}]
60
+ """
61
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.query', sql, *args, **kwargs)
62
+ return do_query(sql, *args)
63
+
64
+
65
+ def query_one(sql: str, *args, **kwargs) -> dict:
66
+ """
67
+ Execute select SQL and return unique result(dict), SQL contain 'limit'.
68
+
69
+ Examples
70
+ --------
71
+ >>> from mysqlx import db
72
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=? LIMIT 1'
73
+ >>> db.query_one(sql, '张三', 20)
74
+ {'id': 3, 'name': '张三', 'age': 20}
75
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age LIMIT 1'
76
+ >>> db.query_one(sql, name='张三', age=20)
77
+ {'id': 3, 'name': '张三', 'age': 20}
78
+ """
79
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.query_one', sql, *args, **kwargs)
80
+ return do_query_one(sql, *args)
81
+
82
+
83
+ def select(sql: str, *args, **kwargs) -> List[Tuple]:
84
+ """
85
+ Execute select SQL and return list results(tuple).
86
+
87
+ Examples
88
+ --------
89
+ >>> from mysqlx import db
90
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=?'
91
+ >>> db.select(sql, '张三', 20)
92
+ [(3, '张三', 20)]
93
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age '
94
+ >>> db.get(sql, name='张三', age=20)
95
+ [(3, '张三', 20)]
96
+ """
97
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.select', sql, *args, **kwargs)
98
+ return do_select(sql, *args)
99
+
100
+
101
+ def select_one(sql: str, *args, **kwargs) -> Tuple:
102
+ """
103
+ Execute select SQL and return unique result(tuple), SQL contain 'limit'.
104
+
105
+ Examples
106
+ --------
107
+ >>> from mysqlx import db
108
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=? LIMIT 1'
109
+ >>> db.select_one(sql, '张三', 20)
110
+ (3, '张三', 20)
111
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age LIMIT 1'
112
+ >>> db.select_one(sql, name='张三', age=20)
113
+ (3, '张三', 20)
114
+ """
115
+ sql, args = sql_support.try_dynamic_sql('MySQLX.db.select_one', sql, *args, **kwargs)
116
+ return do_select_one(sql, *args)
117
+
118
+
119
+ def query_page(sql: str, page_num=1, page_size=10, *args, **kwargs) -> List[dict]:
120
+ """
121
+ Execute select SQL and return list or empty list if no result.
122
+
123
+ Automatically add 'limit ?,?' after sql statement if not.
124
+
125
+ Examples
126
+ --------
127
+ >>> from mysqlx import db
128
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=?'
129
+ >>> db.query_page(sql, 1, 10, '张三', 20)
130
+ [{'id': 3, 'name': '张三', 'age': 20}]
131
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age '
132
+ >>> db.query_page(sql, 1, 10, name='张三', age=20)
133
+ [{'id': 3, 'name': '张三', 'age': 20}]
134
+ """
135
+ sql, args = sql_support.try_page_mapping('query_page', sql, page_num, page_size, *args, **kwargs)
136
+ return do_query_page(sql, page_num, page_size, *args)
137
+
138
+
139
+ def select_page(sql: str, page_num=1, page_size=10, *args, **kwargs) -> List[Tuple]:
140
+ """
141
+ Execute select SQL and return list(tuple) or empty list if no result.
142
+
143
+ Automatically add 'limit ?,?' after sql statement if not.
144
+
145
+ Examples
146
+ --------
147
+ >>> from mysqlx import db
148
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=? and age=?'
149
+ >>> db.select_page(sql, 1, 10, '张三', 20)
150
+ [(3, '张三', 20)]
151
+ >>> sql = 'SELECT id, name, age FROM person WHERE name=:name and age=:age '
152
+ >>> db.select_page(sql, 1, 10, name='张三', age=20)
153
+ [(3, '张三', 20)]
154
+ """
155
+ sql, args = sql_support.try_page_mapping('select_page', sql, page_num, page_size, *args, **kwargs)
156
+ return do_select_page(sql, page_num, page_size, *args)
157
+
158
+
159
+ from .sql_page_exec import sql, page
@@ -46,13 +46,13 @@ def do_get_sql(sql_model, batch, param_names, *args, **kwargs):
46
46
  :return:
47
47
  """
48
48
  if sql_model.dynamic:
49
- if not kwargs:
50
- raise MapperError("Parameter 'kwargs' must not be empty when named mapping sql.")
51
49
  sql = sql_model.sql.render(**kwargs)
52
- logger.debug("Original sql: {}".format(sql))
50
+ # 去掉空行
51
+ sql = '\n\t'.join([line for line in sql.rstrip().split('\n\t') if line.strip()])
52
+ logger.debug(f"Original sql: {sql}")
53
53
  return get_named_sql_args(sql, **kwargs)
54
54
  else:
55
- logger.debug("Original sql: {}".format(sql_model.sql))
55
+ logger.debug(f"Original sql: {sql_model.sql}")
56
56
  if sql_model.mapping and kwargs:
57
57
  return get_named_sql_args(sql_model.sql, **kwargs)
58
58
  elif sql_model.placeholder and kwargs:
@@ -65,7 +65,7 @@ def do_get_sql(sql_model, batch, param_names, *args, **kwargs):
65
65
 
66
66
 
67
67
  def build_sql_id(namespace, _id):
68
- return namespace + "." + _id
68
+ return f'{namespace}.{_id}'
69
69
 
70
70
 
71
71
  def get_sql_model(sql_id: str):
@@ -179,4 +179,6 @@ def _load_sql(namespace, child, file):
179
179
 
180
180
 
181
181
  def _valid_sql(sql_id, sql, tag):
182
+ if tag in (SqlAction.SQL.value, SqlAction.CALL.value):
183
+ return
182
184
  assert tag in _valid_sql_actions and tag in sql.lower(), "Sql id: '{}' has not '{}' key word in {} sql.".format(sql_id, tag, tag)
@@ -87,16 +87,20 @@ def get_exec_func(func, action, batch):
87
87
  def get_select_func(func):
88
88
  names = func.__code__.co_names
89
89
  is_list = 'list' in names or 'List' in names
90
- if 'Mapping' in names and is_list:
90
+ is_dict = 'dict' in names or 'Mapping' in names
91
+ is_tuple = 'tuple' in names or 'Tuple' in names
92
+ if is_dict and is_list:
91
93
  return sqlexecx.do_query
92
- elif 'Mapping' in names:
94
+ elif is_tuple and is_list:
95
+ return sqlexecx.do_select
96
+ elif is_dict in names:
93
97
  return sqlexecx.do_query_one
94
98
  elif len(names) == 1 and names[0] in ('int', 'float', 'Decimal', 'str', 'AnyStr', 'date', 'time', 'datetime'):
95
99
  return sqlexecx.do_get
96
100
  elif len(names) == 1 and names[0] in ('tuple', 'Tuple'):
97
101
  return sqlexecx.do_select_one
98
- elif is_list:
99
- return sqlexecx.do_select
102
+ elif is_list and len(names) == 2:
103
+ return sqlexecx.do_ravel_list
100
104
  else:
101
105
  return sqlexecx.do_query
102
106
 
@@ -11,6 +11,7 @@ class NotFoundError(DBError):
11
11
 
12
12
 
13
13
  class SqlAction(Enum):
14
+ SQL = 'sql'
14
15
  CALL = 'call'
15
16
  INSERT = 'insert'
16
17
  UPDATE = 'update'
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mysqlx
3
- Version: 2.2.4
4
- Summary: A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions. It also provides ORM operations for single tables.
3
+ Version: 2.2.6
4
+ Summary: A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions.
5
5
  Home-page: https://gitee.com/summry/mysqlx
6
6
  Author: summy
7
7
  Author-email: xiazhongbiao@126.com
@@ -115,7 +115,24 @@ Usage Sample
115
115
  # (3, 'zhangsan', 15)
116
116
 
117
117
  # you can direct execute sql with db
118
- effected_rowcount = db.insert(table='user', name='zhaoliu', age=66)
118
+ effected_rowcount = db.table('person').insert(name='zhangsan', age=15)
119
+ # 1
120
+
121
+ primary_key = db.table('person').save(name='lisi', age=26)
122
+ # 4
123
+
124
+ effected_rowcount = db.insert(table='user', name='wangwu', age=38)
125
+ # 1
126
+
127
+ users = db.table('user').columns('id, name, age').select()
128
+ # result:
129
+ # (3, 'zhangsan', 15)
130
+ # (4, 'lisi', 26)
131
+ # (5, 'wangwu', 38)
132
+
133
+ users = db.table('user').columns('id, name, age').where(name='zhangsan').query()
134
+ # result:
135
+ # [{'id': 3, 'name': 'zhangsan', 'age': 15}]
119
136
 
120
137
  users = db.select('select id, name, age from user')
121
138
  # result:
@@ -136,25 +153,25 @@ Transaction
136
153
 
137
154
  .. code:: python
138
155
 
139
- from mysqlx import with_transaction, transaction
156
+ from mysqlx import trans
140
157
 
141
- @with_transaction
158
+ @trans
142
159
  def test_transaction():
143
160
  insert_func(....)
144
161
  update_func(....)
145
162
 
146
163
 
147
164
  def test_transaction2():
148
- with transaction():
165
+ with trans():
149
166
  insert_func(....)
150
167
  update_func(....)
151
168
 
152
- You can generate model class with mysqlx-generator: https://pypi.org/project/sqlormx
169
+ If you want to use ORM, may be you need SQLORMX: https://pypi.org/project/sqlormx
153
170
 
154
171
  If you want to operate PostgreSQL database, may be you need PgSqlx: https://pypi.org/project/pgsqlx
155
172
 
156
- If you just wanted a simple sql executor, may be you need sqlx-exec: https://pypi.org/project/sqlexecx
173
+ If you just wanted a simple sql executor, may be you need SQLExecX: https://pypi.org/project/sqlexecx
157
174
 
158
- If you wanted simultaneously support MySQL and PostgreSQL, may be you need sqlx-batis: https://pypi.org/project/batisx
175
+ If you wanted simultaneously support MySQL and PostgreSQL, may be you need BatisX: https://pypi.org/project/batisx
159
176
 
160
177
 
@@ -0,0 +1,2 @@
1
+ Jinja2>=2.7.0
2
+ sqlexecx>=2.1.4
@@ -14,14 +14,14 @@ long_description = read("README.rst")
14
14
  setup(
15
15
  name='mysqlx',
16
16
  packages=['mysqlx'],
17
- description="A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions. It also provides ORM operations for single tables.",
17
+ description="A thread safe sql executor for MySQL like MyBatis with connection pool. It helps you automatically manage database connections and transactions.",
18
18
  long_description=long_description,
19
19
  long_description_content_type='text/markdown',
20
20
  install_requires=[
21
21
  'Jinja2>=2.7.0',
22
- 'sqlexecx>=2.1.3',
22
+ 'sqlexecx>=2.1.4',
23
23
  ],
24
- version='2.2.4',
24
+ version='2.2.6',
25
25
  url='https://gitee.com/summry/mysqlx',
26
26
  author='summy',
27
27
  author_email='xiazhongbiao@126.com',
mysqlx-2.2.4/mysqlx/db.py DELETED
@@ -1,95 +0,0 @@
1
- from . import sql_support
2
- # Don't remove. Import for not repetitive implementation
3
- from sqlexecx import insert, save, batch_insert, batch_execute, do_execute, do_save_sql, do_get, do_query,\
4
- do_query_one, do_select,do_select_one, do_select_page, do_query_page, do_select_page, do_query_page, load, do_load, insert_from_csv,\
5
- insert_from_df, insert_from_json, truncate_table, drop_table, table
6
-
7
-
8
- def execute(sql: str, *args, **kwargs):
9
- """
10
- Execute SQL.
11
- sql: INSERT INTO user(name, age) VALUES(?, ?) --> args: ('张三', 20)
12
- INSERT INTO user(name, age) VALUES(:name,:age) --> kwargs: {'name': '张三', 'age': 20}
13
- """
14
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.execute', sql, *args, **kwargs)
15
- return do_execute(sql, *args)
16
-
17
-
18
- # ----------------------------------------------------------Query function------------------------------------------------------------------
19
- def get(sql: str, *args, **kwargs):
20
- """
21
- Execute select SQL and expected one int and only one int result. Automatically add 'limit ?' after sql statement if not.
22
- MultiColumnsError: Expect only one column.
23
- sql: SELECT count(1) FROM user WHERE name=? and age=? limit 1 --> args: ('张三', 20)
24
- SELECT count(1) FROM user WHERE name=:name and age=:age limit 1 --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
25
- """
26
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.get', sql, *args, **kwargs)
27
- return do_get(sql, *args)
28
-
29
-
30
- def query(sql: str, *args, **kwargs):
31
- """
32
- Execute select SQL and return list or empty list if no result.
33
- sql: SELECT * FROM user WHERE name=? and age=? --> args: ('张三', 20)
34
- SELECT * FROM user WHERE name=:name and age=:age --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
35
- """
36
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.query', sql, *args, **kwargs)
37
- return do_query(sql, *args)
38
-
39
-
40
- def query_one(sql: str, *args, **kwargs):
41
- """
42
- Execute select SQL and expected one row result(dict). Automatically add 'limit ?' after sql statement if not.
43
- If no result found, return None.
44
- If multiple results found, the first one returned.
45
- sql: SELECT * FROM user WHERE name=? and age=? limit 1 --> args: ('张三', 20)
46
- SELECT * FROM user WHERE name=:name and age=:age limit 1 --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
47
- """
48
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.query_one', sql, *args, **kwargs)
49
- return do_query_one(sql, *args)
50
-
51
-
52
- def select(sql: str, *args, **kwargs):
53
- """
54
- Execute select SQL and return list(tuple) or empty list if no result.
55
- sql: SELECT * FROM user WHERE name=? and age=? --> args: ('张三', 20)
56
- SELECT * FROM user WHERE name=:name and age=:age --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
57
- """
58
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.select', sql, *args, **kwargs)
59
- return do_select(sql, *args)
60
-
61
-
62
- def select_one(sql: str, *args, **kwargs):
63
- """
64
- Execute select SQL and expected one row result(tuple). Automatically add 'limit ?' after sql statement if not.
65
- If no result found, return None.
66
- If multiple results found, the first one returned.
67
- sql: SELECT * FROM user WHERE name=? and age=? limit 1 --> args: ('张三', 20)
68
- SELECT * FROM user WHERE name=:name and age=:age limit 1 --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
69
- """
70
- sql, args = sql_support.try_dynamic_sql('MySQLX.db.select_one', sql, *args, **kwargs)
71
- return do_select_one(sql, *args)
72
-
73
-
74
- # ----------------------------------------------------------Page function------------------------------------------------------------------
75
- def query_page(sql: str, page_num=1, page_size=10, *args, **kwargs):
76
- """
77
- Execute select SQL and return list or empty list if no result. Automatically add 'limit ?,?' after sql statement if not.
78
- sql: SELECT * FROM user WHERE name=? and age=? --> args: ('张三', 20)
79
- SELECT * FROM user WHERE name=:name and age=:age --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
80
- """
81
- sql, args = sql_support.try_page_mapping('query_page', sql, page_num, page_size, *args, **kwargs)
82
- return do_query_page(sql, page_num, page_size, *args)
83
-
84
-
85
- def select_page(sql: str, page_num=1, page_size=10, *args, **kwargs):
86
- """
87
- Execute select SQL and return list(tuple) or empty list if no result. Automatically add 'limit ?,?' after sql statement if not.
88
- sql: SELECT * FROM user WHERE name=? and age=? --> args: ('张三', 20)
89
- SELECT * FROM user WHERE name=:name and age=:age --> kwargs: ('张三', 20) --> kwargs: {'name': '张三', 'age': 20}
90
- """
91
- sql, args = sql_support.try_page_mapping('select_page', sql, page_num, page_size, *args, **kwargs)
92
- return do_select_page(sql, page_num, page_size, *args)
93
-
94
-
95
- from .sql_page_exec import sql, page
@@ -1,2 +0,0 @@
1
- Jinja2>=2.7.0
2
- sqlexecx>=2.1.3
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes