添加多对多记录时显示SQLAlchemy错误,提示在分配“名称”之前无法编译Column对象

如何解决添加多对多记录时显示SQLAlchemy错误,提示在分配“名称”之前无法编译Column对象

我试图吞下与SQLAlchemy的这种多对多关系,但是在提交会话时遇到了问题。到session.add部分为止,未引发任何错误。直到session.commit()被触发。到目前为止,还没有关于错误的适当文档,对此我感到很沮丧。

这是代码:

# import anything
from sqlalchemy import Table,Column,Integer,String,Float,ForeignKey,DateTime,create_engine
from sqlalchemy.orm import relationship,backref
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql import func
import pandas as pd
import numpy as np

engine = create_engine('sqlite:///D:\\temp\\AISEE.db',echo=True)
Base = declarative_base(engine)

# orm class declaration
class Feeder(Base):
    __tablename__ = 'pp_feeder'
    
    id = Column(Integer,primary_key=True)
    name = Column(String)
    

class Pole(Base):
    __tablename__ = 'pp_pole'
    
    id = Column(String,primary_key=True)
    feeder_id = Column(Integer,ForeignKey('pp_feeder.id'))
    model = Column(String)
    number = Column(String)
    coordinate = Column(String)
    
    # relationship
    feeder = relationship("Feeder",backref="Feeder")
    
    
class Component(Base):
    __tablename__ = 'pp_component'
    
    id = Column(String,primary_key=True)
    pole_id = Column(String,ForeignKey('pp_pole.id'))
    name = Column(String)
    nps = Column(String)
    schedule = Column(String)
    original_thickness_mm = Column(Float)
    original_thickness_inch = Column(Float)
    
    # relationship
    pole = relationship("Pole",backref="Pole")


class Inspection(Base):
    __tablename__ = 'pp_inspection'
    
    id = Column(Integer,primary_key=True)
    component_id = Column(String,ForeignKey('pp_component.id'))
    date = Column(DateTime)
    category = Column(String)
    type = Column(String)
    location = Column(String)
    value_text = Column(String)
    value_number = Column(Float)
    remarks = Column(String)
    source_file = Column(String)
    
    # relationship
    component = relationship("Component",backref="Component")

    
# anorev_to_inspection = Table('pp_anorev_to_inspection',Base.metadata,#     Column('anorev_id',ForeignKey('pp_anorev_lowsec.id')),#     Column('inspection_id',ForeignKey('pp_inspection.id'))
# )

    
class Anomalyreviewlocsec(Base):
    __tablename__ = 'pp_anorev_lowsec'
    
    id = Column(Integer,primary_key=True)
    inspection_date = Column(DateTime)
    inspection_location = Column(String)
    visual = Column(String)
    cml_12oclock = Column(Float)
    cml_03oclock = Column(Float)
    cml_06oclock = Column(Float)
    cml_09oclock = Column(Float)
    original_thickness_ref = Column(Float)
    remaining_thickness = Column(Float)
    anomaly_category = Column(String)
    inspection_ids = Column(String)
    created_at = Column(DateTime)
    
    # relationship
    inspection = relationship("Anorevinspection")
    

class Anorevinspection(Base):
    __tablename__ = 'pp_anorev_to_inspection'
    id = Column(Integer,primary_key=True)
    anorev_id = Column(Integer,ForeignKey('pp_anorev_lowsec.id'))
    inspection_id = Column(Integer,ForeignKey('pp_inspection.id'))
    
    # relationship
    anomalyreviewlocsec = relationship(Anomalyreviewlocsec,back_populates="")
    inspection = relationship(Inspection,backref=backref('pp_inspection'),remote_side="Inspection.id")
    inspection = relationship("Inspection")


metadata = Base.metadata
Session = sessionmaker(bind = engine)
session = Session()

ew = Anomalyreviewlocsec(
    inspection_date = Column(DateTime(timezone=True),server_default=func.now()),inspection_location = "-30 cm from Ground",visual = "Good",cml_12oclock = 8.1,cml_03oclock = 8.3,cml_06oclock = 8.8,cml_09oclock = 8.2,original_thickness_ref = 9.2,remaining_thickness = 95,anomaly_category = "GREEN",inspection_ids = "345,456",created_at = Column(DateTime(timezone=True),)

selected_inspection = session.query(Inspection).filter(Inspection.id < 10)[0]

new.inspection.append(selected_inspection)

session.add(new)
session.commit()

我得到的错误:

CompileError                              Traceback (most recent call last)
<ipython-input-20-83a1dbdbd92a> in <module>
----> 1 session.commit()

D:\python\lib\site-packages\sqlalchemy\orm\session.py in commit(self)
   1034                 raise sa_exc.InvalidRequestError("No transaction is begun.")
   1035 
-> 1036         self.transaction.commit()
   1037 
   1038     def prepare(self):

D:\python\lib\site-packages\sqlalchemy\orm\session.py in commit(self)
    501         self._assert_active(prepared_ok=True)
    502         if self._state is not PREPARED:
--> 503             self._prepare_impl()
    504 
    505         if self._parent is None or self.nested:

D:\python\lib\site-packages\sqlalchemy\orm\session.py in _prepare_impl(self)
    480                 if self.session._is_clean():
    481                     break
--> 482                 self.session.flush()
    483             else:
    484                 raise exc.FlushError(

D:\python\lib\site-packages\sqlalchemy\orm\session.py in flush(self,objects)
   2494         try:
   2495             self._flushing = True
-> 2496             self._flush(objects)
   2497         finally:
   2498             self._flushing = False

D:\python\lib\site-packages\sqlalchemy\orm\session.py in _flush(self,objects)
   2635         except:
   2636             with util.safe_reraise():
-> 2637                 transaction.rollback(_capture_exception=True)
   2638 
   2639     def bulk_save_objects(

D:\python\lib\site-packages\sqlalchemy\util\langhelpers.py in __exit__(self,type_,value,traceback)
     67             if not self.warn_only:
     68                 compat.raise_(
---> 69                     exc_value,with_traceback=exc_tb,70                 )
     71         else:

D:\python\lib\site-packages\sqlalchemy\util\compat.py in raise_(***failed resolving arguments***)
    176 
    177         try:
--> 178             raise exception
    179         finally:
    180             # credit to

D:\python\lib\site-packages\sqlalchemy\orm\session.py in _flush(self,objects)
   2595             self._warn_on_events = True
   2596             try:
-> 2597                 flush_context.execute()
   2598             finally:
   2599                 self._warn_on_events = False

D:\python\lib\site-packages\sqlalchemy\orm\unitofwork.py in execute(self)
    420         else:
    421             for rec in topological.sort(self.dependencies,postsort_actions):
--> 422                 rec.execute(self)
    423 
    424     def finalize_flush_changes(self):

D:\python\lib\site-packages\sqlalchemy\orm\unitofwork.py in execute(self,uow)
    587             self.mapper,588             uow.states_for_mapper_hierarchy(self.mapper,False,False),--> 589             uow,590         )
    591 

D:\python\lib\site-packages\sqlalchemy\orm\persistence.py in save_obj(base_mapper,states,uowtransaction,single)
    243             mapper,244             table,--> 245             insert,246         )
    247 

D:\python\lib\site-packages\sqlalchemy\orm\persistence.py in _emit_insert_statements(base_mapper,cached_connections,mapper,table,insert,bookkeeping)
   1130                 if value_params:
   1131                     result = connection.execute(
-> 1132                         statement.values(value_params),params
   1133                     )
   1134                 else:

D:\python\lib\site-packages\sqlalchemy\engine\base.py in execute(self,object_,*multiparams,**params)
    982             )
    983         else:
--> 984             return meth(self,multiparams,params)
    985 
    986     def _execute_function(self,func,params):

D:\python\lib\site-packages\sqlalchemy\sql\elements.py in _execute_on_connection(self,connection,params)
    291     def _execute_on_connection(self,params):
    292         if self.supports_execution:
--> 293             return connection._execute_clauseelement(self,params)
    294         else:
    295             raise exc.ObjectNotExecutableError(self)

D:\python\lib\site-packages\sqlalchemy\engine\base.py in _execute_clauseelement(self,elem,params)
   1092                 schema_translate_map=self.schema_for_object
   1093                 if not self.schema_for_object.is_default
-> 1094                 else None,1095             )
   1096 

<string> in <lambda>(self,bind,dialect,**kw)

D:\python\lib\site-packages\sqlalchemy\sql\elements.py in compile(self,default,**kw)
    466             else:
    467                 dialect = default.StrCompileDialect()
--> 468         return self._compiler(dialect,bind=bind,**kw)
    469 
    470     def _compiler(self,**kw):

D:\python\lib\site-packages\sqlalchemy\sql\elements.py in _compiler(self,**kw)
    472         Dialect."""
    473 
--> 474         return dialect.statement_compiler(dialect,self,**kw)
    475 
    476     def __str__(self):

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in __init__(self,statement,column_keys,inline,**kwargs)
    588         self.truncated_names = {}
    589 
--> 590         Compiled.__init__(self,**kwargs)
    591 
    592         if (

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in __init__(self,schema_translate_map,compile_kwargs)
    317             if self.can_execute:
    318                 self.execution_options = statement._execution_options
--> 319             self.string = self.process(self.statement,**compile_kwargs)
    320 
    321     @util.deprecated(

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in process(self,obj,**kwargs)
    348 
    349     def process(self,**kwargs):
--> 350         return obj._compiler_dispatch(self,**kwargs)
    351 
    352     def __str__(self):

D:\python\lib\site-packages\sqlalchemy\sql\visitors.py in _compiler_dispatch(self,visitor,**kw)
     93                     )
     94                 else:
---> 95                     return meth(self,**kw)
     96 
     97         else:

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in visit_insert(self,insert_stmt,asfrom,**kw)
   2426 
   2427         crud_params = crud._setup_crud_params(
-> 2428             self,crud.ISINSERT,**kw
   2429         )
   2430 

D:\python\lib\site-packages\sqlalchemy\sql\crud.py in _setup_crud_params(compiler,stmt,local_stmt_type,**kw)
     62     try:
     63         if local_stmt_type in (ISINSERT,ISUPDATE):
---> 64             return _get_crud_params(compiler,**kw)
     65     finally:
     66         if should_restore:

D:\python\lib\site-packages\sqlalchemy\sql\crud.py in _get_crud_params(compiler,**kw)
    165             check_columns,166             values,--> 167             kw,168         )
    169 

D:\python\lib\site-packages\sqlalchemy\sql\crud.py in _scan_cols(compiler,parameters,_getattr_col_key,_column_as_key,_col_bind_name,check_columns,values,kw)
    329                 implicit_return_defaults,330                 values,--> 331                 kw,332             )
    333 

D:\python\lib\site-packages\sqlalchemy\sql\crud.py in _append_param_parameter(compiler,c,col_key,implicit_returning,implicit_return_defaults,kw)
    418             if not c.primary_key:
    419                 compiler.postfetch.append(c)
--> 420             value = compiler.process(value.self_group(),**kw)
    421     values.append((c,value))
    422 

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in process(self,**kw)
     96 
     97         else:

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in visit_column(self,column,add_to_result_map,include_table,**kwargs)
    867         name = orig_name = column.name
    868         if name is None:
--> 869             name = self._fallback_column_name(column)
    870 
    871         is_literal = column.is_literal

D:\python\lib\site-packages\sqlalchemy\sql\compiler.py in _fallback_column_name(self,column)
    859     def _fallback_column_name(self,column):
    860         raise exc.CompileError(
--> 861             "Cannot compile Column object until " "its 'name' is assigned."
    862         )
    863 

CompileError: Cannot compile Column object until its 'name' is assigned.

有什么我可以解决的吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-