エラーログ内容
状態:-
閲覧数:492
投稿日:2017-05-25
更新日:2018-06-22
Unsupported response type: <class 'int'>
遭遇例1
修正前
return(r.width, r.height,r.area())
from bottle import route
# Rectという名前のクラスを定義する。
class Rect:
# インスタンスが作成された直後に呼び出される特殊なメソッドを定義する。
def __init__(self, width, height):
self.width = width # width属性に値を格納する。
self.height = height # height属性に値を格納する。
# 面積を計算するメソッドを定義する。
def area(self):
return self.width * self.height
@route('/')
def index():
r = Rect(100, 20)
return(r.width, r.height,r.area()) # 100 20 2000と表示される。
修正後
return(str(r.width), str(r.height), str(r.area()))
from bottle import route
# Rectという名前のクラスを定義する。
class Rect:
# インスタンスが作成された直後に呼び出される特殊なメソッドを定義する。
def __init__(self, width, height):
self.width = width # width属性に値を格納する。
self.height = height # height属性に値を格納する。
# 面積を計算するメソッドを定義する。
def area(self):
return self.width * self.height
@route('/')
def index():
r = Rect(100, 20)
return(str(r.width), str(r.height), str(r.area())) # 100 20 2000と表示される。
遭遇例2
修正前
return(row)
#!/usr/bin/python3.6 python
import sqlite3
from bottle import route, default_app
@route('/demo/application/python-crawling-scraping/chapter2/savesqlite3')
def index():
conn = sqlite3.connect('top_cities.db') # top_cities.dbファイルを開き、コネクションを取得する。
c = conn.cursor() # カーソルを取得する。
# execute()メソッドでSQL文を実行する。
# このスクリプトを何回実行しても同じ結果になるようにするため、citiesテーブルが存在する場合は削除する。
c.execute('DROP TABLE IF EXISTS cities')
# citiesテーブルを作成する。
c.execute('''
CREATE TABLE cities (
rank integer,
city text,
population integer
)
''')
# execute()メソッドの第2引数にはSQL文のパラメーターのリストを指定できる。
# パラメーターで置き換える場所(プレースホルダー)は?で指定する。
c.execute('INSERT INTO cities VALUES (?, ?, ?)', (1, '上海', 24150000))
# パラメーターが辞書の場合、プレースホルダーは :キー名 で指定する。
c.execute('INSERT INTO cities VALUES (:rank, :city, :population)',
{'rank': 2, 'city': 'カラチ', 'population': 23500000})
# executemany()メソッドでは、複数のパラメーターをリストで指定できる。
# パラメーターの数(ここでは3つ)のSQLを順に実行できる。
c.executemany('INSERT INTO cities VALUES (:rank, :city, :population)', [
{'rank': 3, 'city': '北京', 'population': 21516000},
{'rank': 4, 'city': '天津', 'population': 14722100},
{'rank': 5, 'city': 'イスタンブル', 'population': 14160467},
])
conn.commit() # 変更をコミット(保存)する。
c.execute('SELECT * FROM cities') # 保存したデータを取得するSELECT文を実行する。
for row in c.fetchall(): # クエリの結果はfetchall()メソッドで取得できる。
return(row) # 保存したデータを表示する。
conn.close() # コネクションを閉じる。
application = default_app()
修正後
return(str(row))
#!/usr/bin/python3.6 python
import sqlite3
from bottle import route, default_app
@route('/demo/application/python-crawling-scraping/chapter2/savesqlite3')
def index():
conn = sqlite3.connect('top_cities.db') # top_cities.dbファイルを開き、コネクションを取得する。
c = conn.cursor() # カーソルを取得する。
# execute()メソッドでSQL文を実行する。
# このスクリプトを何回実行しても同じ結果になるようにするため、citiesテーブルが存在する場合は削除する。
c.execute('DROP TABLE IF EXISTS cities')
# citiesテーブルを作成する。
c.execute('''
CREATE TABLE cities (
rank integer,
city text,
population integer
)
''')
# execute()メソッドの第2引数にはSQL文のパラメーターのリストを指定できる。
# パラメーターで置き換える場所(プレースホルダー)は?で指定する。
c.execute('INSERT INTO cities VALUES (?, ?, ?)', (1, '上海', 24150000))
# パラメーターが辞書の場合、プレースホルダーは :キー名 で指定する。
c.execute('INSERT INTO cities VALUES (:rank, :city, :population)',
{'rank': 2, 'city': 'カラチ', 'population': 23500000})
# executemany()メソッドでは、複数のパラメーターをリストで指定できる。
# パラメーターの数(ここでは3つ)のSQLを順に実行できる。
c.executemany('INSERT INTO cities VALUES (:rank, :city, :population)', [
{'rank': 3, 'city': '北京', 'population': 21516000},
{'rank': 4, 'city': '天津', 'population': 14722100},
{'rank': 5, 'city': 'イスタンブル', 'population': 14160467},
])
conn.commit() # 変更をコミット(保存)する。
c.execute('SELECT * FROM cities') # 保存したデータを取得するSELECT文を実行する。
for row in c.fetchall(): # クエリの結果はfetchall()メソッドで取得できる。
return(str(row)) # 保存したデータを表示する。
conn.close() # コネクションを閉じる。
application = default_app()
・2-6.データを保存する