[英]how to parse mysql database name from database_url
DATABASE_URL- MYSQL://username:password@host:port/database_name DATABASE_URL- MYSQL://username:password@host:port/database_name
Error: database_name has no attributes.错误:database_name 没有属性。
if 'DATABASE_URL' in os.environ:
url = urlparse(os.getenv['DATABASE_URL'])
g['db'] = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname ,port=url.port,path=url.path[1:])
First of all, url.host
would result into:首先,
url.host
将导致:
AttributeError: 'ParseResult' object has no attribute 'host'
AttributeError: 'ParseResult' 对象没有属性 'host'
use url.hostname
instead.改用
url.hostname
。
To get the database_name
out of the provided URL, use path
:要从提供的 URL 中获取
database_name
,请使用path
:
url.path[1:]
An alternative "Don't reinvent the wheel" way to approach the problem would be to use sqlalachemy
's make_url()
, which is regexp-based :解决该问题的另一种“不要重新发明轮子”方法是使用
sqlalachemy
的make_url()
,它是基于正则表达式的:
In [1]: from sqlalchemy.engine.url import make_url
In [2]: url = make_url("MYSQL://username:password@host:100/database_name")
In [3]: print url.username, url.password, url.host, url.port, url.database
username password host 100 database_name
Using standard python3 lib使用标准的python3库
from urllib.parse import urlparse
dbc = urlparse('mysql://username:password@host:port/database_name')
print(dbc.scheme, dbc.hostname, dbc.username, dbc.password, dbc.path.lstrip('/'))
#output: mysql host username password database_name
将路径更改为 'database':url.path[1:] 对我有用。
update 2022/11/16更新 2022/11/16
Python 3.10.6 (main, Aug 11 2022, 13:47:18) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from sqlalchemy.engine.url import make_url
>>> url = make_url("mysql+pymysql://username:password@host:3306/database_name?charset=utf8")
>>> print(url.get_backend_name(),
... url.get_driver_name(),
... url.username,
... url.password,
... url.host,
... url.port,
... url.database,
... url.query)
mysql pymysql username password host 3306 database_name immutabledict({'charset': 'utf8'})
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.