জিডিএল / ওজিআর পাইথন বাইন্ডিংগুলিতে পোস্টগ্রাইএসকিউএল / পোস্টজিআইএস ত্রুটিগুলি কীভাবে ধরা যায়?


10

কোনও জিজ্ঞাসা ব্যর্থ হওয়ার পরে কি ওজিআরে পোস্টগ্রিজ এসকিউএল আউটপুট ত্রুটি বার্তাগুলি ধরা সম্ভব?

উদাহরণ স্বরূপ

conn.ExecuteSQL('SELECT * FROM non_existing_table;')

পোস্টগ্রিসে এটি একটি ত্রুটি বার্তা দেয়:

"Error: relation 'non_existing_table' does not exist."

ওগরে আমরা মানটি পাই:

"Error: current transaction is aborted, commands ignored until end of transaction block"

পোস্টগ্র্রেস ত্রুটি বার্তাটি ধরা / পার্স করতে পারলে এটি একটি বোনাস হবে। আমি সন্দেহ করি যে এটি এসডিজিআইজি / সিপিএল সম্পর্কে আমি যা পড়েছি তা দেওয়া দীর্ঘমেয়াদী, তবে কারও ধারণা পেয়েছে কিনা তা জিজ্ঞাসা করার মতো। আদর্শভাবে এটি পাইথনে হবে তবে আমি সি / সি ++ মন্তব্যগুলিও নেব!

ধন্যবাদ।

উত্তর:


6

আপনার জিডিএল / ওজিআর 1.9.x এ আপগ্রেড করা উচিত যেখানে পোস্টগ্রাইএসকিউএল ডেটাসোর্সটির জন্য ত্রুটি প্রতিবেদন করার উন্নতি হয়েছে:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from osgeo import ogr
>>> ogr.UseExceptions()
>>> ds = ogr.Open('pg:dbname=autotest')
>>> ds.ExecuteSQL("SELECT * FROM non_existing_table")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/dist-packages/osgeo/ogr.py", line 699, in ExecuteSQL
    return _ogr.DataSource_ExecuteSQL(self, *args, **kwargs)
RuntimeError: ERREUR:  la relation « non_existing_table » n'existe pas
LINE 1: DECLARE executeSQLCursor CURSOR for SELECT * FROM non_existi...

1

আপনি যদি সাইকোপজি 2 ব্যবহার করে থাকেন তবে নীচের কোড হিসাবে "ত্রুটি" ফাংশনে রেখে ত্রুটি বার্তাটি সহজে মুদ্রণ করতে পারেন। কোডটি আবার না লেখার জন্য zetcode.com থেকে নেওয়া হয়েছিল ...

#!/usr/bin/python
# -*- coding: utf-8 -*-

import psycopg2
import sys


con = None

try:

    con = psycopg2.connect(database='testdb', user='janbodnar') 
    cur = con.cursor()
    cur.execute('SELECT version()')          
    ver = cur.fetchone()
    print ver    


except psycopg2.DatabaseError, e:
    print 'Error %s' % e    
    sys.exit(1)


finally:

    if con:
        con.close()

আমি এটি আপনাকে সাহায্য করে আশা করি...


ধন্যবাদ অ্যারাগন, হ্যাঁ সাইসকপজি 2 একটি দুর্দান্ত গ্রন্থাগার, তবে ওজিআর দিয়ে এই জাতীয় কিছু সম্ভব কিনা তা দেখতে আগ্রহী। জ্যামিতি ক্রিয়াকলাপ পরিচালনা করতে আমাদের ওজিআর দরকার এবং আমি কেবল আলাদা আলাদা এপিআই ব্যবহারের জন্য সংযোগগুলি নকল করতাম না।
টমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.