我见过很多解决这个问题的方法,但其中任何一种都解决了我的问题
我有一个INSERT
查询,它被包装在try/except中,尽管它在数据库中运行良好(数据被正确插入),但会调用一个回溯,代码跳转到except,查询执行下面的代码被忽略(在我的例子中不会发生这种情况)
是这样的:
query = """
INSERT INTO
mytable(user_id, tcx_extension, user_email, created_date)
VALUES
{}
""".format("('12345678910', '6666', 'test123@test.com', '2020/01/06 00:00:00')")
self.pgsql.execute_query(query) // the error is triggered here
//important code below that is ignored when the error fires
self.pgsql.execute_query
函数如下所示:
def execute_query(self, query, retry=0, format=True):
if self.pool is None:
self._open_pool(PGSQL["connection_string"])
try:
conn = self.pool.getconn()
cur = conn.cursor()
conn.autocommit = True
LOG.info("Executing query", extra={"query": query})
cur.execute(query)
if format is True:
data = Formatter.format_cursor(cur)
else:
data = None
self.pool.putconn(conn)
cur.close()
except pool.PoolError as e:
LOG.error("PoolError: {}".format(e), extra={"query": query})
if retry > MAX_RETRIES:
raise TooManyRetries("Too many retries: {}".format(e))
LOG.info("Will retry: {}".format(e), extra={"query": query})
time.sleep(1)
return self.execute_query(query, retry + 1)
return data
回溯如下所示:
[2021-01-06 15:28:15,421] ERROR in app: Exception on /members/manage_socket_members [POST]
Traceback (most recent call last):
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\flask_restful\__init__.py", line 480, in wrapper
resp = resource(*args, **kwargs)
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\flask\views.py", line 84, in view
return self.dispatch_request(*args, **kwargs)
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\flask_restful\__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "C:\Users\artur.santos\Documents\#salesforce\rc-analytics-api\src\decorators\auth.py", line 70, in wrap
return f(*args, **kwargs)
File "C:\Users\artur.santos\Documents\#salesforce\rc-analytics-api\src\members\manage_socket_members.py", line 30, in post
return abort(500, error)
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\werkzeug\exceptions.py", line 707, in abort
return _aborter(status, *args, **kwargs)
File "C:\Users\artur.santos\AppData\Local\Programs\Python\Python37\lib\site-packages\werkzeug\exceptions.py", line 687, in __call__
raise self.mapping[code](*args, **kwargs)
werkzeug.exceptions.InternalServerError: 500 Internal Server Error: 'NoneType' object is not iterable
有没有办法解决这个问题
编辑1:除了created_date
之外,所有表字段都是“VARCHAR”类型
编辑2:当我尝试在双引号之间插入一些值时,错误会发生变化(这对我来说也是一个无意义的错误)。我不知道这是否能让我更接近解决方案。看看我打印的日志
> query: INSERT INTO wfm.socket_user_relation (user_id, tcx_extension, user_email, created_date) VALUES (12345678937, 63, "test37@test.com.br", "2021/01/07 09:25:35")
> exception: column "test37@test.com.br" does not exist
LINE 1: ...ser_email, created_date) VALUES (12345678937, 63, "test37@te...
^
编辑3:如果我尝试INSERT
将所有这些都双引号,错误仍然是一样的:Error: 500 Internal Server Error: 'NoneType' object is not iterable
在执行函数时,您没有设置
format
参数,因此它总是True
(正如您在函数定义中所确定的那样)成功地在PgSQL数据库中插入内容时的响应是
None
,并且无法将字符串格式设置为NoneType Object
只要使用上面的代码,你就会很好
相关问题 更多 >
编程相关推荐