Python 我正试图使用一个dict构造一个sqlalchemy引擎,该dict具有从tkinter解析的变量

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

任何帮助都将不胜感激。我有一个使用sqlalchemy的连接引擎,它可以完美地连接。我想让它成为动态的,用户在tkinter输入框中提供信息,这些信息被解析成dict,dict又被函数调用,引擎由此创建

我的工作引擎是:

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方法。再次感谢