我正在尝试使用dict构建一个sqlalchemy引擎,该字典具有从tkinter解析到的变量

nei*_*umi 2 python dictionary sqlalchemy

非常感激任何的帮助。我有一个使用sqlalchemy的连接引擎,它可以完美连接。我想在用户在tkinter条目框中提供信息的地方使其动态化,然后将该信息解析为字典,然后由函数调用该字典,然后从那里创建引擎。

我的工作引擎是:

engine =    sqlalchemy.create_engine('postgresql+pg8000://myuser:mypass@localhost/mydb')
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西

sqlalchemy.create_engine('postgresql+pg8000://DBUSER:DBPASS@DBHOST/DBNAME')
Run Code Online (Sandbox Code Playgroud)

其中,变量首先由tkinter Entry提供,并放入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)
Run Code Online (Sandbox Code Playgroud)

我得到错误

db_connect返回create_engine(url(DATABASE))TypeError:“模块”对象不可调用

Man*_*iaz 6

url.URL()通过使用关键字参数将其输入到sqlalchemy的函数中

create_engine(url.URL(**DATABASE))
Run Code Online (Sandbox Code Playgroud)

注意**和正确的方法url.URL(),而不是仅仅url按照http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#sqlalchemy.engine.url.URL

关于做什么的参考**https : //docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists