我只将这段代码添加到这个存储库(https://github.com/ibdafna/webdash)的*ts文件中,它在我的conda环境中工作得很好。
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,但没有成功。
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)发布于 2022-04-09 17:13:53
Pyodide或在web浏览器中运行的任何内容都不支持TCP/IP连接。您需要一个TCP/IP连接才能连接到远程PostgreSQL数据库。psycopg2或任何其他普通的SQL数据库驱动程序都不能使用Pyodide。
Web浏览器不能进行TCP/IP连接,因为它将是一个安全噩梦,因为它们可以连接到本地网络中的任何应用程序。
发布于 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数据库文件)。
https://stackoverflow.com/questions/71789778
复制相似问题