SQLAlchemy 警告应该显式声明文本列表达式吗?

sve*_*ema 10 python sqlalchemy python-3.x

我不断收到此警告,无论如何似乎都无法摆脱它(除了压制它):

C:\...\site-packages\sqlalchemy\sql\elements.py:4390: SAWarning:
Textual column expression 'column_name' should be explicitly declared
with text('column_name'), or use column('column_name') for more
specificity 

if guess_is_literal else "column"
Run Code Online (Sandbox Code Playgroud)

我在一个元数据上下文中构建了一个 Column() 对象(列名 + 数据类型)列表,然后在另一个元数据上下文中使用这个列表创建一个表。虽然这有效,但它确实给出了这个警告。我试过了:

  • 将其存储为“引用名称”
  • 使用 column() 将列转换为“ColumnClause”
  • 使用 text() 将列转换为“TextClause”
  • 使用 str() 将列转换为字符串

无论如何,我仍然收到警告。

以下是 Python 代码的一些片段:

for col_name in self.cols_source:
            print(meta.tables[self.table_name].c[col_name].name)
            print(type(meta.tables[self.table_name].c[col_name].name))          #quotedname
            print(type(column(meta.tables[self.table_name].c[col_name].name)))  #ColumnClause
            print(type(text(meta.tables[self.table_name].c[col_name].name)))    #TextClause
            print(type(str(meta.tables[self.table_name].c[col_name].name)))     #Str

            #source_query_cols.append( Column( name=meta.tables[self.table_name].c[col_name].name, type_=meta.tables[self.table_name].c[col_name].type ))
            #source_query_cols.append( Column( name=column(meta.tables[self.table_name].c[col_name].name), type_=meta.tables[self.table_name].c[col_name].type ))
            #source_query_cols.append( Column( name=text(meta.tables[self.table_name].c[col_name].name), type_=meta.tables[self.table_name].c[col_name].type ))
            source_query_cols.append( Column( name=str(meta.tables[self.table_name].c[col_name].name), type_=meta.tables[self.table_name].c[col_name].type ))
Run Code Online (Sandbox Code Playgroud)

Sér*_*fra 7

您应该按照错误说明将其转换为文本。为此,请根据您的需要调整以下代码:)

from sqlalchemy.sql import text
...
cursor.execute(text(<whatever_needed_to_be_casted>))
Run Code Online (Sandbox Code Playgroud)

  • 您可以通过显示导入和 text() 使用来使您的答案更清晰,光标部分令人困惑 (2认同)