我们使用python进行postgres sqlalchemy数据库的通信,并不时出现错误
ERROR 2017-05-24 16:45:55,072 45610 (psycopg2.OperationalError) SSL SYSCALL error: EOF detected
[SQL: '\n SELECT sys.check_permissions(%(username)s, ARRAY[%(permission_0)s]);\n '] [parameters: {'username': 'miksanikm', 'permission_0': 'searchBrokerContact'}]
Traceback (most recent call last):
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/spyne/application.py", line 122, in process_request
self.event_manager.fire_event('method_call', ctx)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/spyne/_base.py", line 442, in fire_event
handler(ctx)
File "wsgi.py", line 161, in _on_method_call
if not ctx.udc.hasPermissions(ctx.udc.method_name):
File "wsgi.py", line 145, in hasPermissions
return system_lib.checkPermission(self.username, *args)
File "./app/system/lib.py", line 126, in checkPermission
''' % permissions), args)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 945, in execute
return meth(self, multiparams, params)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
context)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
exc_info
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
context)
File "/home/python/projects/allrisk_isac/venv/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 470, in do_execute
cursor.execute(statement, parameters)
所以在此调用之后整个应用程序失败。所以这是一个非常严重的错误,但我认为它在postgres本身。你有什么想法,为什么会这样?
编辑:
Python查询代码 PS:如果你有提示编辑它以便更容易阅读,请告诉我
def searchBrokerContact(rcic, name, surname, city, phone, email, id_person_company, id_broker):
def regExPercent(x):
if x is None:
return '%'
return '%'+x+'%'
connection = connections['default']
if len(rcic) > 0:
condition = u' (pc.ico = :rcic OR pc.rc = :rcic) LIMIT 50'
else:
condition = u''' ((lower(pc.name) like lower(:name) or (pc.name IS NULL AND :name IN ('%%', '%')))
AND (lower(pc.surname) like lower(:surname) OR lower(pc.company_name) like lower(:surname))
AND (lower(ad.city) like lower(:city) OR (ad.city IS NULL AND :city IN ('%%', '%')))
AND (regexp_replace(pc.phone_mobile, '[ +]*', '', 'g') like regexp_replace(:phone, '[ +]*', '', 'g') OR (pc.phone_mobile IS NULL AND :phone IN ('%%', '%')))
AND (pc.email like :email OR (pc.email IS NULL AND :email IN ('%%', '%') )) ) LIMIT 50'''
query = connection.execute(text(
u"""
SELECT DISTINCT
CASE WHEN pc.organization_type = 10 THEN pc.rc ELSE pc.ico END AS client_icorc,
CASE
WHEN pc.organization_type IN (10, 20) THEN
btrim((((COALESCE(pc.degree, ''::character varying)::text || ' '::text) || COALESCE(pc.name, ''::character varying)::text) || ' '::text) || COALESCE(pc.surname, ''::character varying)::text)
ELSE
pc.company_name
END AS client_name,
pc.organization_type,
pc.id_person_company AS id_person_company,
pc.email AS email,
pc.phone_mobile AS phone,
btrim((((((COALESCE(ad.street, ''::character varying)::text || ' '::text) || COALESCE(ad.land_registry_num, ad.house_num, ''::character varying)::text) || ', '::text) || COALESCE(ad.zip, ''::character varying)::text) || ' '::text) || COALESCE(ad.city, ''::character varying)::text) AS address_client,
CASE
WHEN ad.id_address = ac.id_address THEN
CASE WHEN pc.organization_type = 10
THEN 'shodná s adresou trvalého pobytu'
ELSE 'shodná s adresou sídla'
END
ELSE
btrim((((((COALESCE(ac.street, ''::character varying)::text || ' '::text) || COALESCE(ac.land_registry_num, ac.house_num, ''::character varying)::text) || ', '::text) || COALESCE(ac.zip, ''::character varying)::text) || ' '::text) || COALESCE(ac.city, ''::character varying)::text)
END AS address_c,
pc.degree,
pc.sex,
pc.name,
pc.surname,
pc.organization_type,
pc.rc,
pc.ico,
pc.bank_account,
pc.bank_code,
pc.bank_prefix,
ad.street,
ad.house_num,
ad.land_registry_num,
ad.city,
ad.zip,
ad.id_country,
ac.street AS street_c,
ac.house_num AS house_num_c,
ac.land_registry_num AS land_registry_num_c,
ac.city AS city_c,
ac.zip AS zip_c,
CASE WHEN ac.id_address = ad.id_address THEN false ELSE true END AS has_cor,
pc.identity_card,
pc.company_name,
id.card_from,
id.card_to,
id.card_num,
id.card_authority,
id.card_type,
CASE WHEN id.id_identity NOTNULL THEN true ELSE false END AS has_identity,
bc.created::date
FROM
personal.person_company AS pc
INNER JOIN personal.broker_contact AS bc ON bc.id_person_company = pc.id_person_company
INNER JOIN personal.address AS ad ON ad.id_address = pc.id_address
LEFT JOIN personal.address AS ac ON ac.id_address = pc.id_address_mailing
LEFT JOIN personal.identity AS id ON id.id_identity = pc.id_identity
LEFT JOIN personal.client AS cl ON cl.id_person_company = pc.id_person_company
WHERE bc.deleted IS NULL and pc.deleted IS Null AND cl.id_client Is NULL
AND bc.id_broker = :id_broker
AND
"""+condition), id_person_company=id_person_company, rcic=rcic, name=regExPercent(name), surname=regExPercent(surname), city=regExPercent(city), phone=regExPercent(phone), email=regExPercent(email), id_broker=id_broker)
output = []
for row in query:
item = ClientListItem(id_person_company=row['id_person_company'],
client_name=row['client_name'],
client_icorc=row['client_icorc'],
address=row['address_client'],
address_cor=row['address_c'],
phone=row['phone'],
email=row['email'],
city=row['city'],
created=row['created'])
output.append(item)
return output
这是在restAPI for java这里是service.py代码
@rpc(ByteArray(default=['']), ByteArray(default=['']), ByteArray(default=['']), ByteArray(default=['']), ByteArray(default=['']), ByteArray(default=['']), Integer(default=None), Integer(default=None), _returns=ClientList)
def searchBrokerContact(ctx, rcic, name, surname, city, phone, email, id_person_company, id_broker):
'''
Service returns list of contacts
'''
list= external_contract_lib.searchBrokerContact(rcic[0], name[0], surname[0], city[0], phone[0], email[0], id_person_company, id_broker)
return ClientList(list=list)