6

Pythonを使用してSQLデータベースから結果をフェッチしていると、戻り値の最初と最後に追加のチャーターが表示されます。たとえば、以下のコードは56ではなく((56L、)、)を返しますが、値だけを取得する方法を知っている人はいますか...そして((、)、)が実際に何を意味するのか...?

hp= 56
id= 3

database = MySQLdb.connect (host="localhost", user = "root", passwd = "", db = "db")

cursor = database.cursor()

cursor.execute("UPDATE period_option SET points =%s WHERE period_option_id =%s", (hp, id))

cursor.execute("SELECT points FROM period_option WHERE period_option_id =%s", (po_id_home))
results = cursor.fetchall()
print results  
4

4 に答える 4

9

fetchall()タプルのリスト(実際にはタプル)を返します。これを一連の行と考えてください。各行は列内の一連の項目です。検索で1行しか返されないことが確実な場合は、fetchone()を使用してください。これにより、解凍が簡単なタプルが返されます。以下は、fetchall()およびfetchone()から必要なものを抽出する例です。

# Use fetchall():
((points,),) = cursor.fetchall()  # points = 56L

# Or, if you use fetchone():
(points,) = cursor.fetchone()     # points = 56L
于 2013-02-13T19:30:19.353 に答える
3

次のメソッドを試してください。fetchall()の出力をより適切なリストに変換するのに役立ちます。

 row = cursor.fetchall()
 print row 
 output is : [(1,), (2,), (3,), (4,)]
 num = list(sum(row, ()))
 print num
 output is : [1, 2, 3, 4]
于 2016-10-21T09:45:51.360 に答える
3

クエリを使用して1つの値のみを取得している場合は、0番目のインデックスを取得できます。

results = cursor.fetchall()

結果の値が1つしかない場合は、を使用しますresults[0]。それはあなたが探している価値をあなたに与えるはずです。クエリを実行すると大きな結果が得られることがあります。この場合、値を繰り返し処理してリストに割り当てる必要があります。

>>> result
('58',)
>>> result[0]
'58'

巨大なアイテムのクエリを実行すると、curosr.fetchall()を使用すると次のような出力が得られます。

(('58',),('50',),('10'),)

次のコードを使用して、リスト形式でデータを取得します

>>> results=(('58',),('50',),('10'),)
>>>[x[0] for x in results] --> code
   ['58', '50', '1']
于 2017-08-31T12:29:53.867 に答える
1

56L長整数です。「長整数の精度は無制限です。」単純な整数と同じように使用できます。

次のようなことを行うと、長い値だけを確認できます。

for result in results:
    print result[0]

REPLセッションの例:

>>> results = ((56L,),)
>>> for result in results:
...     print(result[0])
...
56

.fetchall()DB-APIでは、残りの行を「シーケンスのシーケンス(タプルのリストなど)として」返すものとして定義されています。(( ,),)MySQLdbのデフォルトでは、このように見えるタプルのタプルを使用します( (1,2,3), (4,5,6) )。結果セットの個々の行が内側のタプルであるため、常に同じ長さです。

于 2013-02-13T19:19:15.503 に答える