web-dev-qa-db-ja.com

SQLAlchemy警告テキスト列式は明示的に宣言する必要がありますか?

私はこの警告を受け取り続け、それを取り除くことができないように見えても(それを抑制する以外に):

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"

あるメタデータコンテキストで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 ))
5
svenema

エラーの説明に従って、テキストにキャストする必要があります。これを行うには、次のコードをニーズに適合させます:)

from sqlalchemy.sql import text
...
cursor.execute(text(<whatever_needed_to_be_casted>))
2
Sérgio Mafra