gpt4 book ai didi

python - 'numpy.float6 4' object has no attribute ' translate' 在 Python 中向 Mysql 插入值

转载 作者:太空狗 更新时间:2023-10-29 21:18:06 26 4
gpt4 key购买 nike

import dataset
db = dataset.connect(....)
table = db[...]

当我尝试向 Mysql 表中插入一些值时,发生了这个错误。

我要插入到表中的示例值:

print("Buy", ticker, price, date, OType, OSize)
Buy AAPL 93.4357142857 2016-05-12 Market 200
data = dict(Order_Side='Buy',Ticker=ticker, Price=price,
Order_Date= date, Order_Type = OType, Volume = OSize )
table.insert(data)

错误信息:

Traceback (most recent call last):

File "<ipython-input-3-b7ab0c98f72f>", line 1, in <module>
runfile('C:/Users/SwigelUser/Documents/GitHub/Trading/Strategies/strat_MA_ExecTest.py', wdir='C:/Users/SwigelUser/Documents/GitHub/Trading/Strategies')

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
execfile(filename, namespace)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/SwigelUser/Documents/GitHub/Trading/Strategies/strat_MA_ExecTest.py", line 69, in <module>
MA_Stra(start_length=7,end_length=10,start_date=date(2016,5,12),end_date=date(2016,6,18))

File "C:/Users/SwigelUser/Documents/GitHub/Trading/Strategies/strat_MA_ExecTest.py", line 66, in MA_Stra
table.insert(data1)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\dataset\persistence\table.py", line 87, in insert
res = self.database.executable.execute(self.table.insert(row))

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 945, in execute
return meth(self, multiparams, params)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\sql\elements.py", line 263, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1053, in _execute_clauseelement
compiled_sql, distilled_params

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1189, in _execute_context
context)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1405, in _handle_dbapi_exception
util.reraise(*exc_info)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py", line 187, in reraise
raise value

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py", line 1182, in _execute_context
context)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py", line 470, in do_execute
cursor.execute(statement, parameters)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\cursors.py", line 164, in execute
query = self.mogrify(query, args)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\cursors.py", line 143, in mogrify
query = query % self._escape_args(args, conn)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\cursors.py", line 123, in _escape_args
return dict((key, conn.literal(val)) for (key, val) in args.items())

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\cursors.py", line 123, in <genexpr>
return dict((key, conn.literal(val)) for (key, val) in args.items())

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\connections.py", line 821, in literal
return self.escape(obj, self.encoders)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\connections.py", line 814, in escape
return escape_item(obj, self.charset, mapping=mapping)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\converters.py", line 27, in escape_item
val = encoder(val, mapping)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\converters.py", line 110, in escape_unicode
return u"'%s'" % _escape_unicode(value)

File "C:\Users\SwigelUser\Anaconda3\lib\site-packages\pymysql\converters.py", line 73, in _escape_unicode
return value.translate(_escape_table)

AttributeError: 'numpy.float64' object has no attribute 'translate'

是什么导致了这个错误?我怎么能解决这个问题。好像我在这里输入了太多代码,因此我必须输入很多无意义才能提交。

我的价格和日期变量来自数据框:

for i in range(len(All_Tickers)-1-len(Current_Date),len(All_Tickers)-1):
price = All_Tickers[str(length) + 'day_MA'][i]
date = All_Tickers['Date'][i+1]

根据下面的回答,问题应该是price的类型是np.float64,如何将这个变量转换为float类型?

最佳答案

您的库尝试将提供的参数格式化为 MySQL 能够理解的格式。为此,它会检查每个参数的类型,以确定应如何格式化输入。

但是,由于您的库不知道 numpy.float64,它会回退到默认编码器,这恰好是一个用于 strings (unicode) 的编码器。 Here is the relevent piece of code .

def escape_item(val, charset, mapping=None):
if mapping is None:
mapping = encoders
encoder = mapping.get(type(val))

# Fallback to default when no encoder found
if not encoder:
try:
encoder = mapping[text_type]
except KeyError:
raise TypeError("no default type converter defined")

if encoder in (escape_dict, escape_sequence):
val = encoder(val, charset, mapping)
else:
val = encoder(val, mapping)
return val

这个编码器,假设输入确实是一个字符串,尝试在这个字符串上调用 translate() 方法。但是,由于没有为 float64 定义此方法,您会收到此错误。

您应该尝试将 float64 转换为常规 float。

或者,您可以创建自己的编码器,并将其添加到用作 python 类型到编码器的默认映射的 encoders 字典中。如果您打算将此库与 float64 一起大量使用,则可能值得这样做。

关于python - 'numpy.float6 4' object has no attribute ' translate' 在 Python 中向 Mysql 插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com