在MS Windows上,使用Python 3的pyodbc
模块,我正在使用PostgreSQL。当我使用PostgreSQL的TEXT
数据类型并尝试存储类UNIX的EOL时,原始\n
被替换为\r\n
。看下面的例子。PostgreSQL在文本字段中使用Python替换LF + CR + LF pyodbc
import pyodbc
def main():
connection = pyodbc.connect(
'DRIVER={PostgreSQL Unicode(x64)};'
'SERVER=127.0.0.1;'
'UID=postgres;'
'PWD=topsecret;'
'DATABASE=db1');
cursor = connection.cursor();
cursor.execute('CREATE SCHEMA schema1 '
'CREATE TABLE table1 ('
'key SERIAL PRIMARY KEY,'
'value TEXT'
')');
cursor.execute('INSERT INTO schema1.table1 (value) VALUES (?)',
'hello\nworld');
r = cursor.execute('SELECT value FROM schema1.table1').fetchone()[0];
print(r == 'hello\nworld'); # prints False
print(r == 'hello\r\nworld'); # prints True
if __name__ == '__main__':
main();
确实,这种行为在某些情况下可能是有利的。但是,就我而言,这是不可取的。我无法找到如何在PostgreSQL的文档中关闭此功能,并且我不确定替换是在哪里发生的。有任何想法吗?
为什么使用'pyodbc'而不是比较高级的'psycopg2'? –
另外,我会说转换可能是在ODBC驱动程序。检查DSN设置页面。 –
@CraigRinger你是对的,我只是尝试过''psycopg2''而不是''pyodbc'',LF→CR + LF不再发生。它真的在司机之内。 – Tregoreg