gpt4 book ai didi

python - 使用 SQLAlchemy 添加到数据库时出现奇怪的类型错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:05 27 4
gpt4 key购买 nike

我刚刚开始使用 python 的 SQLAlchemy 包来维护一个简单的 sqlite3 数据库以进行一些实验。这个错误花了我一段时间才弄明白,所以我想我应该把它贴出来。对于我发现的方法,可能还有更好的方法。我正在使用 Python 2.7.2。

当我在一个类中有一个整数列与数据库中的一个表匹配时,例如这个简单的 Featdata 类,就会出现问题。

class FeatData(Base):
__tablename__ = 'featdata'

id = Column(Integer, primary_key=True)
name = Column(String)
value = Column(Integer)
order = Column(Integer)

当我尝试向表中添加记录时,我正在对数据进行一些其他操作,实际上并不是此处显示的内容,但此代码会生成相同的错误。我首先对条目进行排序,然后使用该排序的输出来填充列值。

engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(engine)

Session = sessionmaker(autoflush=False, bind=engine)
session = Session()

featnames=['thing','widget','dongle']
featvalues=[87,2,15]
newobjects=[]

for i in numpy.argsort(featvalues):
newobjects += [FeatData(name=featnames[i], value=featvalues[i], order = i) ]

session.add_all(newobjects)
session.commit()

我收到以下错误消息,此处某处的类型有问题。有什么想法吗?

错误信息:

2014-03-28 06:50:14,376 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)

2014-03-28 06:50:14,377 INFO sqlalchemy.engine.base.Engine INSERT INTO featdata (name, value, "order") VALUES (?, ?, ?)

2014-03-28 06:50:14,377 INFO sqlalchemy.engine.base.Engine ('widget', 2, 1)

2014-03-28 06:50:14,378 INFO sqlalchemy.engine.base.Engine ROLLBACK

...

File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/SQLAlchemy-0.9.3-py2.7-macosx-10.5-i386.egg/sqlalchemy/engine/default.py", line 425, in do_execute

cursor.execute(statement, parameters)

sqlalchemy.exc.InterfaceError: (InterfaceError) Error binding parameter 2 - probably unsupported type. u'INSERT INTO featdata (name, value, "order") VALUES (?, ?, ?)' ('widget', 2, 1)

最佳答案

numpy方法返回的类型不是Integer类型:

我在我的解释器上试过下面的代码

>>import numpy 
>>values = [87, 2, 15]
>>n = numpy.argsort(values)
>>type(n[0])
numpy.int64

数据类型是 numpy.int64。

在创建对象之前尝试将类型转换为整数。

newobjects += [FeatData(name=featnames[int(i)], value=featvalues[int(i)], order = int(i)) ]

关于python - 使用 SQLAlchemy 添加到数据库时出现奇怪的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22734671/

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