2017-06-02 3 views
1

私はPythonを使用してSQLに照会しようとしますが、疑問符を返します。Pythonを使用してSQLを照会します

これは私のコードです。

import cx_Oracle 
import importlib 

class CustomDatabase(object): 

    ROBOT_LIBRARY_SCOPE = 'GLOBAL' 

    def __init__(self): 
     """ 
     Initializes _dbconnection to None. 
     """ 
     self._dbconnection = None 
     self.db_api_module_name = None 

    def GetDataFromDatabaseByRow(self, db_connect_string, selectStatement, row): 
     db_api_2 = importlib.import_module("cx_Oracle") 
     db_connect_string = 'db_api_2.connect(%s)' % db_connect_string 
     self.db_api_module_name = "cx_Oracle" 
     self._dbconnection = eval(db_connect_string) 
     row = int(row) 
     cur = None 
     try: 
      cur = self._dbconnection.cursor() 
      cur.execute(selectStatement) 
      res = cur.fetchone() 
      i = 0 
      while (i < row): 
       if cur.rowcount == row: 
        data = res 
       res = cur.fetchone() 
       i = i + 1 
       if i == row: 
        for x in data: 
         result=x 
      #return result.decode('iso-8859-11') 
      return result 
     finally : 
      if cur : 
       self._dbconnection.rollback() 

Obj=CustomDatabase() 
A=Obj.GetDataFromDatabaseByRow("'BELL', 'BELL#', '192.168.1.10:110/BELL'","select book_name from book where id='100'",1) 
print A 

これは実際の結果です。

OOP ??????? 

これは、DB内の値です。

OOP แม่เจ้า 

期待値はOOP แม่เจ้า(タイ語)です。

私を助けてもらえますか? Pythonのを開始する前に、Oracle NLS_LANG環境変数を設定し

+0

あなたがこれを修正した場合はどこから '' id = '100' "' '' 'id = 100" 'の本からbook_nameを選んでbook_nameから選択しますか? – arnold

+0

エンコードを修正する必要があります。 – hd1

答えて

2

は、たとえば

export NLS_LANG=.AL32UTF8 

のために(はい、 '=' の後にピリオドがあります)。グローバル化の

OracleのドキュメントはDatabase Globalization Support Guide

であるあなたは、単に行うことができますアンソニー・tuininga pointed out @ [更新]:

import cx_Oracle conn = cx_Oracle.connect(connectString, encoding = "UTF-8", nencoding = "UTF-8")

この例ではNLS_LANGのための必要はありません。 NCHARデータを使用していない場合は、nencodingオプションを省略できます。

関連する問題