2017-05-12 19 views
0

データベースから任意の数の行を取得するクエリがありますが、通常は2つを超えません。変数を関数に渡すときのPythonのオーバーフローエラー

私は、GUI経由でデータiの値をハードコーディングし、クエリにそれらを養う場合、それは正常に動作しますが、私は通常、全体のプログラムを実行すると

ret = self.workaround.delete_last_version(pdf_file, self.cust_id, self.part_id) 

でクエリを呼び出し、入力、クエリ関数は呼び出しが行われる前に、私は(文字列と文字列にpart_idとCUST_IDを変換し、しかし

OverflowError: long too big to convert 

呼び出されたときに、私はここで

はI値)を取得しますと一緒にテストしています。

part_id = "168440901713431956015724879141" 
cust_id = "15424322074155018763160235136213" 
pdf_file = "1971-48.pdf" 

CUST_IDは、32文字の長さで、かつpart_idは30

であり、ここでクエリです。

query = """ 
    SELECT Id, Name, DocDateStamp, Dir_Id 
    FROM SdmDocumentList 
    WHERE Owner_Id = ? AND Name = ? 
    ORDER BY DocDateStamp desc 
    """ 

    self.cursor.execute(query, (part_id, pdf_file)) 
    result = self.cursor.fetchall() 

、カーソルが__init__

def __init__(self): 

    self.conn =pyodbc.connect('DRIVER=SQL Server;SERVER=mssql;PORT=CORRECTPORT;DATABASE=DATABASENAME;UID=USER;PWD=SUPERSECRETPASSWORD;TDS_Version=8.0;Trusted_Connection=no') #windows 
    self.cursor = self.conn.cursor() 

私は

[('70D8B606A5BD421F97467F2C8D1D8F04', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 28, 58, 743333), 9), 
('F049665629814B83B63B0536F985090B', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 28, 22, 86666), 9), 
('39EAB6B173B745E19BA8A0598AD8F015', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 27, 58, 933333), 9), 
('6309915CEA504839A8D7340F9A4FD601', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 12, 26, 36666), 9), 
('5D3E3AA218CA4FF59E8EC2DE2A6AB217', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 11, 37, 760000), 9), 
('1C2AC1073E754A41A998DF99BD0F4F48', '1971-48.pdf', datetime.datetime(2017, 5, 12, 9, 10, 49, 986666), 9), 
('05EF8020EA354E669D1D930650FBCB02', '1971-48.pdf', datetime.datetime(2017, 5, 12, 8, 54, 59, 80000), 9), 
('834979EFB639466ABC73E76F88DF6750', '1971-48.pdf', datetime.datetime(2017, 5, 12, 8, 54, 5, 46666), 9), 
('F3EF2C75856E4926A52204EBA59072CB', '1971-48.pdf', datetime.datetime(2017, 5, 12, 8, 50, 38, 406666), 9), 
('6F7FC2652E114162AF6B3C4C30818582', '1971-48.pdf', datetime.datetime(2017, 5, 12, 8, 37, 59, 610000), 9)] 

私はPython2.7を実行しているコマンドラインから関数を呼び出すときに私が取得し、予想される出力、で定義されていますWindows7で64ビットと6GBのRAM、mssqlで

私はグーグルで、私がインターネット上で見つけたすべての問題は、長い間別の数値型に変換されていましたが、問題は解決されていませんでした。私はエラーを取得する行で、私は何かを変換しようとしていないだけで、関数に変数を渡す。

Pythonで関数に送信できるデータの量にはいくらかのメモリ制限がありますか、それとも完全に何か不足していますか?

必要に応じて詳細情報を提供していただければ幸いですが、私はこれに必要なすべてを書き留めたと思います。

cuplrit pyodbc

Dir_Id = 9        # Manufactering Data folder (from SdmDirSructure) 
     DocumentType_RecNo = 3     # PDF 
     OwnerType_RecNo = 2      # parent_id for Product (from SdmDirSructure) 
     FromTo = 14872094126171117726173141183125  # CNCDrill user ID 
     DocumentSubject_RecNo = 109    # Xcheck data (from SdmDocumentSubjects) 
     Owner_Id = self.part_id     # It is the part id 
     DocDateStamp = file_datetime   # datetime of the document 
     RegisteredDate = file_datetime   # when the document was added to the doc manager 
     LastReadDate = file_datetime   # date that the document last readed (set as the RegisteredDate) 
     ArchiveLocation_RecNo = 0    # Not in use 
     IsReceived = True      # Not in use 
     IsArchived = False      # Not in use 
     IsOwnedByUser = 0      # No-one ownes the file 

     query = """ 
     INSERT INTO SdmDocumentList (Id, Name, Dir_Id, DocumentType_RecNo, OwnerType_RecNo, FromTo, DocumentSubject_RecNo, Owner_Id, DocDateStamp, RegisteredDate, LastReadDate, ArchiveLocation_RecNo, IsReceived, IsArchived, IsOwnedByUser, IsClassified) 
     VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 
     """ 
     self.cursor.execute(query, (uid,pdf_file, Dir_Id, DocumentType_RecNo, OwnerType_RecNo, FromTo, DocumentSubject_RecNo,Owner_Id, DocDateStamp, RegisteredDate, LastReadDate, ArchiveLocation_RecNo, IsReceived, IsArchived, IsOwnedByUser, IsClassified)) 
     self.cursor.commit() 
+0

。(fetchAllの)場合のx [3] ==」 Owner_Id '] 'ショー?また、あなたは 'pyodbc.version'とは何ですか? –

+0

同じエラー...私は、クエリが実際には、クエリの前にクラッシュが起きていると思います。同じエラーが別のクエリから出てきた開発の初期の問題がありました。ここで仮定した。 そしてその3.0.0サポートされていない – joedamarsio

+0

スクリプトの他の場所にある変数(pdf_file、cust_id、part_id)の3つを問題なく渡しました。 – joedamarsio

答えて

2
FromTo = 14872094126171117726173141183125  # CNCDrill user ID 

を更新した後に問題を引き起こしている新しいクエリ:pyodbcを更新した後に失敗した任意のヘルプ

EDITクエリを事前に

感謝。最終的には、すべての変数とそのタイプを印刷し始めました。このスクリプトでは、 "FromTo"変数を変更するつもりがなかったので、私はこのスクリプトの周りに置くことを忘れてしまったので、それを長くしてしまい、クエリがクラッシュしてしまいました。

私は、スクリプトの前半でデータベースから部品と得意先IDを取得していたときに、それらをUnicodeとして戻していることに気付きました。私はUnicodeに関するいくつかの調査を行い、スクリプトの先頭にエンコードを定義するなどの選択肢を試しましたが、機能しませんでした。しかし、これは、すべての変数が私が期待していたタイプであることを確認する正しい道を私に導いた。 `[X [5] crsr.columns中のx( "SdmDocumentList")のために何金曜日にすべてのヘルプのための

おかげで、@Gordトンプソン月

関連する問題