Python 我正试图使用一个dict构造一个sqlalchemy引擎,该dict具有从tkinter解析的变量
任何帮助都将不胜感激。我有一个使用sqlalchemy的连接引擎,它可以完美地连接。我想让它成为动态的,用户在tkinter输入框中提供信息,这些信息被解析成dict,dict又被函数调用,引擎由此创建 我的工作引擎是:Python 我正试图使用一个dict构造一个sqlalchemy引擎,该dict具有从tkinter解析的变量,python,dictionary,sqlalchemy,Python,Dictionary,Sqlalchemy,任何帮助都将不胜感激。我有一个使用sqlalchemy的连接引擎,它可以完美地连接。我想让它成为动态的,用户在tkinter输入框中提供信息,这些信息被解析成dict,dict又被函数调用,引擎由此创建 我的工作引擎是: engine = sqlalchemy.create_engine('postgresql+pg8000://myuser:mypass@localhost/mydb') 我想要这样的 sqlalchemy.create_engine('postgresql+pg800
engine = sqlalchemy.create_engine('postgresql+pg8000://myuser:mypass@localhost/mydb')
我想要这样的
sqlalchemy.create_engine('postgresql+pg8000://DBUSER:DBPASS@DBHOST/DBNAME')
其中变量首先由tkinter条目提供并放入dict,然后由连接函数读取
我有以下几点
from sqlalchemy import create_engine
from sqlalchemy.engine import url
"""
These vars below are for testing. Ultimately they will be resolved
by a get() from tkinter which will take the values entered by a
user into an Entry widget and place them into the dict below.
The db_connect() func should build the url from the dict.
"""
DBNAME = 'mydb'
DBUSER = 'myuser'
DBPASS = 'password'
DBHOST ='localhost'
PNUM = '5432'
import json
import urllib.request as myurl
DATABASE = {
'drivername': 'postgres+pg8000',
'host': DBHOST,
'port': PNUM,
'username': DBUSER,
'password': DBPASS,
'database': DBNAME
}
def db_connect():
create_engine(url(DATABASE))
"""This func should create the db engine connect
connect = sqlalchemy.create_engine(db_connect())
df = pd.read_sql("SELECT * FROM nc_data",con=connect)
我得到了错误
数据库连接
返回创建引擎(url(数据库))
TypeError:“模块”对象不可调用使用关键字参数将其馈送到sqlalchemy的
url.url()函数中
create_engine(url.URL(**DATABASE))
请注意**
,正确的方法是url.url()
,而不仅仅是根据
关于**
功能的参考资料:非常感谢。这使我走上了正确的道路。很appreciated@neilschumi:不客气!如果此答案完全回答了您的问题,请将答案标记为已接受。我使用的解决方案基于make_url选项:mystring=('postgresql+pg8000://%s:%s@%s/%s')%(DBUSER、DBPASS、DBHOST、DBNAME)#在要动态构建的url下方myurl=sqlalchemy.engine.url.make_url(mystring)engine=sqlalchemy.create_engine(myurl)@neilschumi好的,但我提供的一行回答正好实现了。。。你所做的一切基本上就是重建url.url
方法已经为你做了什么。谢谢Manuel。由于某种原因,我在url.url中遇到了一个错误。方法,所以您让我走上了正确的道路,我使用了make.url方法。再次感谢