Databaseing a float Python - TypeError: Coercing to Unicode:



我目前在尝试将浮点数插入我的 sql 查询时遇到问题,该值是从 api 中提取的,通常是一个非常精确的数字,我无法让 python 插入到我的数据库中与所述浮点数,我什至尝试将其四舍五入,但它仍然抛出错误。以下是错误和代码:

错误

Traceback (most recent call last):
File "main.py", line 12, in <module>
ic.main()
File "/home/sage/Dev/market_Mon/interface_Controller.py", line 32, in main
ccr.config_Load_Cur()
File "/home/sage/Dev/market_Mon/config_Controller_Rebuild.py", line 41, in config_Load_Cur
dbc.database_Insert(str(arr[0]), str(arr[0]), str(arr[1]), arr[2], time.time())
File "/home/sage/Dev/market_Mon/database_Controller.py", line 14, in database_Insert
query = "INSERT INTO " + '`'+ table + '`' + " VALUES('`id` INTEGER PRIMARY KEY','" + ticker + "', '" + currency + "', '" + exchange + "', '" + date + "')"
TypeError: coercing to Unicode: need string or buffer, float found

法典: Arr[2] 是返回浮点数的值。请注意,我已经删除了解决此问题的所有尝试,因为它们只是妨碍了能够准确了解其工作原理。

from decimal import Decimal, ROUND_HALF_UP
import ConfigParser
import io
import json_Controller as jsc
import database_Controller as dbc
import time
from colorama import init, Fore, Back, Style
import threading
import re
import json
from sys import stdout
#Function used to add new currency tickers into config.ini
def config_Add_Cur(currency):
conf = open('config.ini', w)
config = ConfigParser.ConfigParser()
config.add('currency', currency, True)
print (currency + 'added to config.ini')
#Function used to load all currency data from config.ini and to pull current
#Market data related to the relative tickers
def config_Load_Cur():
api_Key = '967OAAEVKJ9WT8F1'
arr = []
whilel = 1
var = 1
with open('config.ini') as f:
conf = f.read()
config = ConfigParser.RawConfigParser(allow_no_value=True)
config.readfp(io.BytesIO(conf))
while whilel == 1:
for (each_key, each_val) in config.items('currency'):
try:
currency = each_key
data = jsc.json_Import_Cur(currency, api_Key)
arr.insert(0, data['Realtime Currency Exchange Rate']['3. To_Currency Code'])
arr.insert(1, data['Realtime Currency Exchange Rate']['4. To_Currency Name'])
arr.insert(2, data['Realtime Currency Exchange Rate']['5. Exchange Rate'])
arr.insert(3, data['Realtime Currency Exchange Rate']['6. Last Refreshed'])
dbc.database_Insert(str(arr[0]), str(arr[0]), str(arr[1]), arr[2], time.time())
print (Fore.GREEN + "-------------------------------------------------------------------------------------------")
print (Back.WHITE + Style.DIM + Fore.CYAN  + arr[0] + Style.NORMAL + Fore.YELLOW + arr[1]  + Fore.MAGENTA + Back.WHITE + arr[2] + Fore.RED + Back.WHITE + arr[3] + Fore.BLUE + Back.WHITE +" inserted into database" + Style.RESET_ALL)
if var == 4:
print(Fore.GREEN + "-------------------------------------------------------------------------------------------")
print (Back.WHITE + Fore.RED + "Sleeping 60 Seconds" + Style.RESET_ALL)
time.sleep(60)
var = 1
else:
var = var + 1
except(KeyError):
pass

数据库控制器:

import sqlite3
from colorama import init
#Initializes database connection and returns connection to function caller
def database_Connect():
connection = sqlite3.connect('cur_Monitor.db')
return connection
#Inserts new rows into a table, this is created to ensure uniformity between rows
def database_Insert(table, ticker, currency, exchange, date ):
try:
sql = database_Connect()
query = "INSERT INTO " + '`'+ table + '`' + " VALUES('`id` INTEGER PRIMARY KEY','" + ticker + "', '" + currency + "', '" + exchange + "', '" + date + "')"
sql.execute(query)
sql.commit()
except():
pass
print "Error occurred databasing!"
#Queries the table, and returns all values which either match or include the
#name string in their overall value
def database_Read(table, currency):
sql = database_Connect()
query = "SELECT * FROM " + table + " WHERE currency LIKE '" + currency + "%'"
for row in sql.execute(query):
return row
#Creates new tables into the database, this will always use the same format
#to ensure uniformity between tables
def database_Table(name):
sql = database_Connect()
query = "CREATE TABLE `" + name + "` (`id` INTEGER PRIMARY KEY,`ticker` text , `currency` text, `exchange` float, `date` timestamp)"
sql.execute(query)
sql.commit()
print name + " New table created!"
#Allows the ordering of table read outs to help allow users to view data better
def database_Order(table, order):
sql = database_Connect()
query = "SELECT * FROM " + table + " ORDER BY " + order
for row in sql.execute(query):
print row

看起来您可能没有将汇率转换为字符串,然后再将其与 SQL 查询的其余部分连接起来。您可以对dbc.database_Insert中的其他值执行此操作,但不对汇率执行此操作

相关内容

最新更新