Skip to content

Commit 751d3c4

Browse files
committed
Add Errors Logic.
1 parent d035ac4 commit 751d3c4

11 files changed

+293
-88
lines changed

README.md

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -179,17 +179,18 @@ Based on security considerations, in order to prevent SQL injection, it is recom
179179
mybatis-py maintains a cache pool for each connection. The elimination strategy is LRU. You can define the maximum byte capacity of the pool. If you do not want to use cache, you can set the parameter configuration. The code is as follows:
180180
```python
181181
from mybatis import *
182-
import mysql.connector
183182

184183
def main():
185-
conn1 = mysql.connector.connect(
184+
conn1 = ConnectionFactory.get_connection(
185+
dbms_name="mysql",
186186
host="localhost",
187187
user="mybatis",
188188
password="mybatis",
189189
database="mybatis"
190190
)
191191

192-
conn2 = mysql.connector.connect(
192+
conn2 = ConnectionFactory.get_connection(
193+
dbms_name="mysql",
193194
host="localhost",
194195
user="mybatis",
195196
password="mybatis",
@@ -206,9 +207,10 @@ In order to prevent users from always getting old data, the cache will determine
206207
### Auto Reconnecting
207208
```python
208209
from flask import Flask
209-
import mysql.connector
210-
from mybatis import Mybatis
211-
import json
210+
211+
import mybatis.errors
212+
from mybatis import Mybatis, ConnectionFactory
213+
import orjson as json
212214
import functools
213215

214216
app = Flask(__name__)
@@ -228,14 +230,15 @@ def make_connection_and_mybatis():
228230

229231
if conn is None:
230232
try:
231-
conn = mysql.connector.connect(
233+
conn = ConnectionFactory.get_connection(
234+
dbms_name="postgresql",
232235
host="localhost",
233236
user="mybatis",
234237
password="mybatis",
235-
database="mybatis",
236-
autocommit=False
238+
database="mybatis"
237239
)
238240
mb.conn = conn
241+
mb.conn.set_autocommit(False)
239242

240243
return True
241244

@@ -270,7 +273,7 @@ def select_many():
270273
def insert():
271274
pass
272275

273-
def mysql_auto_reconnect(func):
276+
def sql_auto_reconnect(func):
274277
@functools.wraps(func)
275278
def wrapper(*args, **kwargs):
276279
global connection_error
@@ -282,7 +285,7 @@ def mysql_auto_reconnect(func):
282285
ret = func(*args, **kwargs)
283286
return ret, 200
284287

285-
except mysql.connector.errors.Error as e:
288+
except mybatis.errors.DatabaseError as e:
286289
connection_error = True
287290
return str(e), 500
288291
except Exception as e:
@@ -292,15 +295,19 @@ def mysql_auto_reconnect(func):
292295

293296

294297
@app.route('/')
295-
@mysql_auto_reconnect
298+
@sql_auto_reconnect
296299
def hello():
297300
ret = select_many()
298301
return json.dumps(ret)
299302

300303

301304
@app.route('/insert')
302-
@mysql_auto_reconnect
305+
@sql_auto_reconnect
303306
def do_insert():
304307
ret = insert()
305308
return json.dumps(ret)
309+
310+
if __name__ == "__main__":
311+
app.run(debug=True)
312+
306313
```

example.py

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,9 @@
11
from mybatis import *
22

3-
import mysql.connector
4-
5-
# 连接到 MySQL 数据库
6-
conn = mysql.connector.connect(
7-
host="localhost", # MySQL 主机地址
8-
user="root", # MySQL 用户名
9-
password="19875522", # MySQL 密码
10-
database="sakila" # 需要连接的数据库
11-
)
12-
13-
cur = conn.cursor(prepared=True)
14-
15-
class A:
16-
def __init__(self):
17-
pass
18-
193
def main():
204
mm = MapperManager()
215

22-
mm.read_mapper_xml_file("mapper/test.xml")
6+
mm.read_mapper_xml_file("mapper/test_returning_id.xml")
237

248
# sql, param_list = mm.select("testInclude", {'category':"A", "price":500})
259
# print(sql, param_list)
@@ -45,7 +29,10 @@ def main():
4529
# sql, param_list = mm.select("testStringReplace", {'id':1, 'date':"20241204"})
4630
# print(sql, param_list)
4731

48-
sql, param_list = mm.insert("testInsertSelective", {'name': 'Candy', 'category': "C", 'price':500})
32+
# sql, param_list = mm.insert("testInsertSelective", {'name': 'Candy', 'category': "C", 'price':500})
33+
# print(sql, param_list)
34+
35+
sql, param_list = mm.insert("test_returning_id.insert", {'name': 'Candy', 'category': "C", 'price':500, '__need_returning_id__':'fid'})
4936
print(sql, param_list)
5037

5138
# cur.execute(sql, param_list, multi=True)

example_flask_mybatis.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from flask import Flask
2-
import mysql.connector
3-
from mybatis import Mybatis
2+
3+
import mybatis.errors
4+
from mybatis import Mybatis, ConnectionFactory
45
import orjson as json
56
import functools
67

@@ -21,14 +22,15 @@ def make_connection_and_mybatis():
2122

2223
if conn is None:
2324
try:
24-
conn = mysql.connector.connect(
25+
conn = ConnectionFactory.get_connection(
26+
dbms_name="postgresql",
2527
host="localhost",
2628
user="mybatis",
2729
password="mybatis",
28-
database="mybatis",
29-
autocommit=True
30+
database="mybatis"
3031
)
3132
mb.conn = conn
33+
mb.conn.set_autocommit(False)
3234

3335
return True
3436

@@ -63,7 +65,7 @@ def select_many():
6365
def insert():
6466
pass
6567

66-
def mysql_auto_reconnect(func):
68+
def sql_auto_reconnect(func):
6769
@functools.wraps(func)
6870
def wrapper(*args, **kwargs):
6971
global connection_error
@@ -72,32 +74,27 @@ def wrapper(*args, **kwargs):
7274
if ret is False:
7375
return error_string, 500
7476

75-
76-
7777
ret = func(*args, **kwargs)
7878
return ret, 200
7979

80-
except mysql.connector.errors.Error as e:
80+
except mybatis.errors.DatabaseError as e:
8181
connection_error = True
8282
return str(e), 500
8383
except Exception as e:
8484
return str(e), 500
8585

86-
#wrapper.__name__ = func.__name__
87-
#wrapper.__doc__ = func.__doc__
88-
8986
return wrapper
9087

9188

9289
@app.route('/')
93-
@mysql_auto_reconnect
90+
@sql_auto_reconnect
9491
def hello():
9592
ret = select_many()
9693
return json.dumps(ret)
9794

9895

9996
@app.route('/insert')
100-
@mysql_auto_reconnect
97+
@sql_auto_reconnect
10198
def do_insert():
10299
ret = insert()
103100
return json.dumps(ret)

mapper/test_returning_id.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3+
<mapper namespace="test_returning_id">
4+
<insert id="insert">
5+
INSERT INTO fruits (name, category, price) VALUES (#{name}, #{category}, #{price})
6+
<if test="'__need_returning_id__' in params">
7+
RETURNING ${__need_returning_id__}
8+
</if>
9+
</insert>
10+
</mapper>

0 commit comments

Comments
 (0)