2015-11-26 56 views
2

我正在使用sqlalchemy從MSSQL Server 2005中提取數據。我有一個表,其中包含一個包含值的列,如0x0000000000881C3C, 0x0000000000881C3D, 0x0000000000881C3E, 0x0000000000881C3F如何強制sqlalchemy將字段視爲字符串?

列類型是時間戳。我使用了反射來檢查列類型,並且列類型由sqlalchemy正確確定。但是,當我使用查詢來提取數據時,返回的數據類型是一個字節數組。

對於具有下列值的源行:

0x0000000000881C3C,35,1880744, AR,2014-05-13 13:04:53.000, N, 106, 1B3448E8-4D2F-46A0-87B9-ED07411F1478, NULL, NULL 

通過SQLAlchemy的返回值如下:

(bytearray(b'\x00\x00\x00\x00\x00\x88\x1c<'), 35, 1880744, 'AR', datetime.datetime(2014, 5, 13, 13, 4, 53), 'N', 106, '1B3448E8-4D2F-46A0-87B9-ED07411F1478', None, None) 

如何防止0x0000000000881C3C被解釋爲一個字節數組?有沒有一種方法可以強制sqlalchemy將該列視爲字符串?

當我嘗試將上面的值插入到MongoDB中時,我遇到了問題。我嘗試使用各種解碼和編碼組合,但似乎沒有任何工作。我在我的智慧結束,並希望在這方面的任何幫助。

這裏是我使用的代碼:

engine = create_engine('mssql+pyodbc://my_uid:[email protected]_db') 
metadata = MetaData() 
conn = engine.connect() 
opp_table = Table('MYTABLE', metadata, autoload=True, autoload_with=engine) 
s = select([opp_table]) 
result = conn.execute(s) 
for row in result.fetchall(): 
    print row 
+0

以同樣的方式你O原始SQL,將其轉換爲VARCHAR:'sqlalchemy.sql.func.cast(db.table.column「 VARCHAR')' –

+0

@PauloScardine:謝謝你的建議。我編輯了我的帖子以顯示我正在使用的代碼。你能不能讓我知道我應該在哪裏或如何投出專欄? –

+0

你能提供「CREATE TABLE」語句嗎? –

回答

1

有沒有一種方法,我可以強制SQLAlchemy的治療該列作爲 字符串?

使用autoloadColumns結合,override reflected columns

... 
from sqlalchemy.types import Unicode 

opp_table = Table('MYTABLE', metadata, 
        Column('your_column_name', Unicode(30)), 
        autoload=True, 
        autoload_with=engine) 
相關問題