【问题标题】:Accented column names, introspection and mapping重音列名、自省和映射
【发布时间】:2014-07-24 20:42:08
【问题描述】:

我想使用 SQLAlchemy 访问旧版 MSSQL 数据库。通过基本模式检查,我已经可以列出我感兴趣的表的列。不幸的是,这些列名有时包含重音字母(例如“Magánszemély”、“LevelezésiCímIrányítószám”)。

我唯一的要求是能够查询这个数据库。

我使用以下命令为您列出了一些数据库名称

def inspect_komplex_table():
    table = Table('D_Allomanylista_Komplex_V', meta, autoload=True, autoload_with=engine)
    return table

def get_columns():
    keys = inspect_komplex_table().columns.keys()
    keys.sort()
    txt = '\n'.join(keys)
    open('column_names.txt', 'w').write(txt.encode('utf8'))

这会在 column_names.txt 文件中给出一个(长)列表,其中包含以下行:

...
JutÉrvKezd
KEZDET
KTVSZAM
KamaraiTagszám
Képviselők
Lejarat
LevelezésiCímIrányítószám
LevelezésiCímUtca
LevelezésiCímVáros
...

我尝试先创建一个没有重音列的基本映射

class BiztositasokModel(object):

    def __init__(self, UgyfKod):
        self.ugyfelkod = UgyfKod

其中UgyfKod 是自省的列之一,但是

mapper(BiztositasokModel, inspect_komplex_table())

UnicodeEncodeError 失败

有人可以告诉我如何处理这样的数据库吗?

【问题讨论】:

    标签: python unicode sqlalchemy


    【解决方案1】:

    我设法找到了两个答案,一个使用声明式语法,另一个使用经典映射。

    两者都实现了将映射列的默认命名方案更改为 Python 对象属性的方法。

    经典的映射答案是:SQLAlchemy mapping table with non-ascii columns to class

    使用声明性语法的答案:http://docs.sqlalchemy.org/en/latest/orm/mapper_config.html#automating-column-naming-schemes-from-reflected-tables

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      相关资源
      最近更新 更多