首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModuleNotFoundError:使用Pyodide没有名为“psycopg2”的模块

ModuleNotFoundError:使用Pyodide没有名为“psycopg2”的模块
EN

Stack Overflow用户
提问于 2022-04-07 22:51:38
回答 2查看 648关注 0票数 1

我只将这段代码添加到这个存储库(https://github.com/ibdafna/webdash)的*ts文件中,它在我的conda环境中工作得很好。

代码语言:javascript
复制
from sqlalchemy.engine.create import create_engine
import pandas as pd
from datetime import datetime

url = 'postgresql://mmnikx ....'
engine =create_engine(url)
now = datetime.now()
df=pd.DataFrame([now])

df.to_sql(
    "TestDBTime",  # table name
    con=engine,
    if_exists='append',
    index=False
)

我正在尝试使用sqlalchemy连接到数据库。这段代码在一个类型记录文件中。在html文件中使用pyodide运行破折号。我认为问题在于我无法加载psycopg2,因为它不是一个纯python包,而sqlalchemy的pyodide版本没有这个包。

我怎样才能避免这个问题呢?我的主要问题是获取信息。连接到数据库似乎是最好的选择。我试着安装pygsheets,但没有成功。

代码语言:javascript
复制
Uncaught (in promise) PythonError: Traceback (most recent call last):
  File "/lib/python3.9/site-packages/_pyodide/_base.py", line 415, in eval_code
    CodeRunner(
  File "/lib/python3.9/site-packages/_pyodide/_base.py", line 296, in run
    coroutine = eval(self.code, globals, locals)
  File "<exec>", line 19, in <module>
  File "<string>", line 2, in create_engine
  File "/lib/python3.9/site-packages/sqlalchemy/util/deprecations.py", line 309, in warned
    return fn(*args, **kwargs)
  File "/lib/python3.9/site-packages/sqlalchemy/engine/create.py", line 560, in create_engine
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 782, in dbapi
    import psycopg2
ModuleNotFoundError: No module named 'psycopg2'
    at new_error (pyodide.asm.js:14:246344)
    at pyodide.asm.wasm:0xe6e27
    at pyodide.asm.wasm:0xe6f25
    at Object.Module._pythonexc2js (pyodide.asm.js:14:943337)
    at Object.Module.callPyObjectKwargs (pyproxy.gen.ts:409:12)
    at Object.Module.callPyObject (pyproxy.gen.ts:415:17)
    at PyProxyClass.apply (pyproxy.gen.ts:1191:19)
    at Object.apply (pyproxy.gen.ts:1064:18)
    at Object.runPython (api.ts:57:25)
    at r (worker.js:62:35)
EN

回答 2

Stack Overflow用户

发布于 2022-04-09 17:13:53

Pyodide或在web浏览器中运行的任何内容都不支持TCP/IP连接。您需要一个TCP/IP连接才能连接到远程PostgreSQL数据库。psycopg2或任何其他普通的SQL数据库驱动程序都不能使用Pyodide。

Web浏览器不能进行TCP/IP连接,因为它将是一个安全噩梦,因为它们可以连接到本地网络中的任何应用程序。

票数 2
EN

Stack Overflow用户

发布于 2022-04-09 17:06:31

SQLAlchemy需要驱动程序库才能连接到特定的数据库。

可以指定在连接字符串中使用哪个库,因此不一定需要使用psycopg2,这是PostgreSQL的默认驱动程序。

例如,您可以让postgresql+asyncpg://user:pass@host:port/db使用asyncpg

这可能不是一个好的选择(除非您想要异步代码)。这里提供了由PostgreSQL支持的SQLAlchemy数据库驱动程序库的完整列表。,也许其中之一会起作用?

或者,您可以尝试安装psycopg2-binary包,这是我经常使用的,考虑到psycopg2的后期版本是多么的复杂!但是,请注意,它并不是正式推荐用于生产的。

最后,听起来您并不关心数据是否存储在postgres中?如果数据足够轻量级,您可以选择查看电子表格,那么为什么不考虑使用SQLite数据库呢?然后,数据库就是应用程序可以访问的文件。您可以从盒子中获得sqlalchemy支持,切换就像将连接字符串更改为sqlite:///path/to/my.db一样简单(其中my.db是您将要创建的SQLite数据库文件)。

我在这里创建了一个简化的例子,如果你对这个选项感兴趣的话--这和我认为你想要做的非常相似。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71789778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档