gpt4 book ai didi

python - 无法在列的行中找到列

转载 作者:行者123 更新时间:2023-12-04 14:27:51 25 4
gpt4 key购买 nike

我是 Sqlalchemy 的新用户,正在学习他们网站上的教程。
我运行了他们关于向数据库添加信息和查询虚拟数据库(内存中的 sqlite)的教程。

在我认为我明白了之后,我尝试针对真正的数据库进行测试 - mysql db。
我正在使用 pymysql驱动程序版本 0.4(我知道它有点旧,但是在使用较新版本时我有其他错误,与此主题无关​​)。

我的代码如下:

def read_from_DB():
engine = create_engine('mysql+pymysql://***@***/test', echo=True)
Session = sessionmaker(bind=engine)
session=Session()

#insert = CpuTable(id='15',name= 'igal')
#session.add(insert)
#session.commit()

print()
print(str(session.query(CpuTable.id.label('id')).all()))


for cpu_id,cpu_name in session.query(CpuTable).all():
print(cpu_id,cpu_name)

我的堆栈跟踪如下:
C:\Python33\python.exe J:/working_dir/TLM/lib/DB_Wrapper/Lab_DB/DB_Reader.py
2014-02-12 11:23:57,193 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
2014-02-12 11:23:57,193 INFO sqlalchemy.engine.base.Engine ()
2014-02-12 11:23:57,196 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%'
2014-02-12 11:23:57,196 INFO sqlalchemy.engine.base.Engine ()
2014-02-12 11:23:57,198 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
2014-02-12 11:23:57,198 INFO sqlalchemy.engine.base.Engine ()
2014-02-12 11:23:57,199 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2014-02-12 11:23:57,199 INFO sqlalchemy.engine.base.Engine SELECT cpu.id AS id
FROM cpu
2014-02-12 11:23:57,199 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\engine\result.py", line 69, in __getitem__
KeyError: <sqlalchemy.sql.elements.Label object at 0x0000000003C6FDA0>

在处理上述异常的过程中,又发生了一个异常:
Traceback (most recent call last):
File "J:/working_dir/TLM/lib/DB_Wrapper/Lab_DB/DB_Reader.py", line 39, in <module>
read_from_DB()
File "J:/working_dir/TLM/lib/DB_Wrapper/Lab_DB/DB_Reader.py", line 26, in read_from_DB
print(str(session.query(CpuTable.id.label('id')).all()))
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\orm\query.py", line 2264, in all
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\orm\loading.py", line 75, in instances
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\orm\loading.py", line 75, in <listcomp>
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\orm\loading.py", line 74, in <listcomp>
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\orm\query.py", line 3440, in proc
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\engine\result.py", line 71, in __getitem__
File "C:\Python33\lib\site-packages\sqlalchemy-0.9.0-py3.3.egg\sqlalchemy\engine\result.py", line 317, in _key_fallback
sqlalchemy.exc.NoSuchColumnError: "Could not locate column in row for column 'cpu.id'"

在调试这个问题时,我设法发现我确实从数据库中得到了结果,只有当查询是 select table.id它返回为 table_id . (我与一些使用它的 friend 交谈过,他们确认它也发生在他们的手上,只有他们的 SQLAlchemy 包装器知道如何处理这个,而我的则抛出此错误)。被注释掉的 insert行是检查我是否连接到数据库,并检查它是否插入了数据,确实如此,查询部分是问题所在。在针对 sqlite 内存数据库进行测试时,它确实有效。

使用 pymysql 处理 MySQL 数据库时会出现什么问题司机?

尝试在网上搜索类似问题 1 天,甚至找不到 1。我的 sqlalchemy 版本是 0.9.1,我将其降级到 0.9,但问题仍然存在。

编辑:
采用不同的方法,我尝试编写不使用类映射的代码。这次我实际上设法检索了数据库中的数据。我添加了代码
metadata = MetaData()
cpu = Table('cpu',metadata,
Column('id',INTEGER,primary_key=True),
Column('name',String(50))
)
from sqlalchemy.sql import select
q = select([cpu])
conn = engine.connect()
result = conn.execute(q)
for row in result:
print(row)

因为我没有使用我创建的映射类,所以我认为 id 显示类本身,可能会提供一些见解:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,INTEGER,String

class CpuTable(declarative_base()):
__tablename__ = 'cpu'
id = Column(INTEGER,primary_key=True)
name = Column(String(50))

def __repr__(self):
return "<cpu(id = '%s',name = '%s')>" % (self.id,self.name)

最佳答案

for row in session.query(CpuTable).all():
item = row['CpuTable']
print(item.cpu_id,item.cpu_name)

关于python - 无法在列的行中找到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21726797/

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