添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

SQLalchemy查询PostgreSQL数据库视图 ERROR: 函数schema_name()不存在

1 人关注

我试图使用python sqlalchemy来查询我们使用ODBC的PostgreSQL数据库视图,但我得到的错误是

{ProgrammingError}(pyodbc.ProgrammingError) ('42883', '[42883] ERROR: function schema_name() does not exist;\nError while execute the query (1) (SQLExecDirectW) ') [SQL: SELECT schema_name() (关于这个错误的背景资料在: https://sqlalche.me/e/14/f405 )

使用下面的代码,我成功地创建了连接引擎,但执行查询似乎是个问题。

当使用'pyodbc'或'psycopg2'建立连接和查询数据时,确实完美地工作,但有一个警告

'UserWarning: pandas只支持SQLAlchemy connectable(engine/connection) ordatabase string URI or sqlite3 DBAPI2 connectionother DBAPI2 objects are not tested, please consider using SQLAlchemy. warnings.warning('

我们为什么要研究如何建立起与 "中国 "的联系? 炼金术士之路

import config
import sqlalchemy
if __name__ == '__main__':
    connection_string = (config.odbc('database_odbc.txt'))
    connection_url = sqlalchemy.engine.url.URL.create("mssql+pyodbc", query={"odbc_connect": connection_string})
    conn = sqlalchemy.create_engine(connection_url)
    query_string = """SELECT [column name in view] FROM public.[name of view]"""
    df1 = pd.read_sql(query_string, conn)
    print(df1.to_string())
    conn.close()
    print('Database connection closed.')

如前所述,使用其他方法,查询可以完美运行。我已经尝试了数据库视图的不同语法,包括

SELECT [视图中的列名] FROM [数据库名称].public.[视图名称]

SELECT [视图中的列名] FROM [视图的名称]

和更多,但没有成功。

希望得到任何帮助,谢谢!

2 个评论
mssql+pyodbc 是 Microsoft SQL Server 的方言。PostgreSQL使用 postgresql+psycopg2
太棒了,我按照默认的postgresql语法在 docs.sqlalchemy.org/en/14/core/engines.html engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')',现在它完美地工作了,谢谢你。
python
postgresql
view
sqlalchemy
schema
AlexisPa
AlexisPa
发布于 2022-03-31
1 个回答
AlexisPa
AlexisPa
发布于 2022-03-31
已采纳
0 人赞同

谢谢你@Gord Thompson。

我按照默认的postgresql语法在 https://docs.sqlalchemy.org/en/14/core/engines.html

engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')

now the code looks like

import sqlalchemy
if __name__ == '__main__':
    engine = create_engine('postgresql://[user]:[password]@[host]/[db]')
    conn = engine.connect()
    query_string = """SELECT [column name in view] FROM public.[name of view]"""
    df1 = pd.read_sql(query_string, conn)