Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SQL Alchemy添加到数据库时出现奇怪的类型错误_Python_Sqlite_Sqlalchemy - Fatal编程技术网

Python 使用SQL Alchemy添加到数据库时出现奇怪的类型错误

Python 使用SQL Alchemy添加到数据库时出现奇怪的类型错误,python,sqlite,sqlalchemy,Python,Sqlite,Sqlalchemy,我刚刚开始使用SQLAlchemy包for python来维护一个简单的sqlite3数据库,以便进行一些实验。这个bug花了我一段时间才弄明白,所以我想我应该把它贴上去。对于我发现的方法,可能还有更好的方法。我正在使用Python 2.7.2 当我在一个类中有一个整数列与数据库中的一个表相匹配时,问题就出现了,比如这个简单的Featdata类 class FeatData(Base): __tablename__ = 'featdata' id = Column(Integer, p

我刚刚开始使用SQLAlchemy包for python来维护一个简单的sqlite3数据库,以便进行一些实验。这个bug花了我一段时间才弄明白,所以我想我应该把它贴上去。对于我发现的方法,可能还有更好的方法。我正在使用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:14376信息sqlalchemy.engine.base.engine BEGIN(隐式)

2014-03-28 06:50:14377信息sqlalchemy.engine.base.engine插入featdata(名称、值、“顺序”)值(?,,?)

2014-03-28 06:50:14377信息sqlalchemy.engine.base.engine('widget',2,1)

2014-03-28 06:50:14378信息sqlalchemy.engine.base.engine回滚

文件“/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”,第425行,在dou execute中

cursor.execute(statement, parameters)
sqlalchemy.exc.InterfaceError:(InterfaceError)绑定参数2时出错-可能是不支持的类型。u'插入featdata(名称、值、“顺序”)值(?,?)'('widget',2,1)


numpy方法返回的类型不是整数类型:

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

>>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)) ]

我知道这一点,但在看到misspec的回答之前我就知道了,所以我还是发布了我自己的答案。当使用SQLAlchemy在sqlite3数据库中创建
列(整数)
时,需要为该列插入python int值。在我的例子中,我正在使用numpy做一些事情,它返回一个int数组,我用它来填充列。但是在这种情况下,
i
而不是
它需要的样子

解决此问题而不做任何更改的简单方法是将numpy int包装在
int()
中:


我的回答解决了你的问题吗?
for i in numpy.argsort(featvalues):
  newobjects += [FeatData(name=featnames[int(i)], value=featvalues[i], order = i) ]