15

DATABASE_URL- MYSQL://username:password@host:port/database_name

Error: database_name has no attributes.

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:])

4 Answers 4

29

First of all, url.host would result into:

AttributeError: 'ParseResult' object has no attribute 'host'

use url.hostname instead.

To get the database_name out of the provided URL, use 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:

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
Sign up to request clarification or add additional context in comments.

2 Comments

I changed my code: g['db'] = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname ,port=url.port,path=url.path[1:]) but it is it is now giving me error:errorraise AttributeError("Unsupported argument '{0}'".format(key)) app[stderr.0]: AttributeError: Unsupported argument 'path'
Use url.drivername for the drivername attribute ("mysql" in this case)
15

Using standard python3 lib

from urllib.parse import urlparse

dbc = urlparse('mysql://username:password@host:3306/database_name')
print(dbc.scheme, dbc.hostname, dbc.port, dbc.username, dbc.password, dbc.path.lstrip('/'))
#output: mysql host port username password database_name

Comments

1

changing path to 'database':url.path[1:] worked for me.

Comments

-1

update 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'})
>>>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.