sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string
Matthew Harrington
I'm learning flask web microframework and after initialization of my database I run flask db init I run flask db migrate, to migrate my models classes to the database and i got an error. I work on Windows 10, the database is MySQL, and extensions install are flask-migrate, flask-sqlalchemy, flask-login.
(env) λ flask db migrate
Traceback (most recent call last): File "c:\python36\Lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "c:\python36\Lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Users\aka\Dev\dream-team\env\Scripts\flask.exe\__main__.py", line 9, in <module> File "c:\users\aka\dev\dream-team\env\lib\site-packages\flask\cli.py", line 513, in main cli.main(args=args, prog_name=name) File "c:\users\aka\dev\dream-team\env\lib\site-packages\flask\cli.py", line 380, in main return AppGroup.main(self, *args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 697, in main rv = self.invoke(ctx) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 1066, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 1066, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 895, in invoke return ctx.invoke(self.callback, **ctx.params) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 535, in invoke return callback(*args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\decorators.py", line 17, in new_func return f(get_current_context(), *args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\flask\cli.py", line 257, in decorator return __ctx.invoke(f, *args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\click\core.py", line 535, in invoke return callback(*args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\flask_migrate\cli.py", line 90, in migrate rev_id, x_arg) File "c:\users\aka\dev\dream-team\env\lib\site-packages\flask_migrate\__init__.py", line 197, in migrate version_path=version_path, rev_id=rev_id) File "c:\users\aka\dev\dream-team\env\lib\site-packages\alembic\command.py", line 176, in revision script_directory.run_env() File "c:\users\aka\dev\dream-team\env\lib\site-packages\alembic\script\base.py", line 427, in run_env util.load_python_file(self.dir, 'env.py') File "c:\users\aka\dev\dream-team\env\lib\site-packages\alembic\util\pyfiles.py", line 81, in load_python_file module = load_module_py(module_id, path) File "c:\users\aka\dev\dream-team\env\lib\site-packages\alembic\util\compat.py", line 83, in load_module_py spec.loader.exec_module(module) File "<frozen importlib._bootstrap_external>", line 678, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "migrations\env.py", line 87, in <module> run_migrations_online() File "migrations\env.py", line 70, in run_migrations_online poolclass=pool.NullPool) File "c:\users\aka\dev\dream-team\env\lib\site-packages\sqlalchemy\engine\__init__.py", line 465, in engine_from_config return create_engine(url, **options) File "c:\users\aka\dev\dream-team\env\lib\site-packages\sqlalchemy\engine\__init__.py", line 424, in create_engine return strategy.create(*args, **kwargs) File "c:\users\aka\dev\dream-team\env\lib\site-packages\sqlalchemy\engine\strategies.py", line 50, in create u = url.make_url(name_or_url) File "c:\users\aka\dev\dream-team\env\lib\site-packages\sqlalchemy\engine\url.py", line 211, in make_url return _parse_rfc1738_args(name_or_url) File "c:\users\aka\dev\dream-team\env\lib\site-packages\sqlalchemy\engine\url.py", line 270, in _parse_rfc1738_args "Could not parse rfc1738 URL from string '%s'" % name)
sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string 'mysql/dt_admin:dt2016@localhost/dreamteam_db' 2 5 Answers
You are not using a valid URL in the connection string.
Review the documentation on how the MySQL connection URLs need to be structured: .
Depending on the MySQL driver that you use the connection URL is different. For example, if you use pymysql, your URL should be:
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] 5 i'd forget the port number to enter the port, this is the URL connection string:
`SQLALCHEMY_DATABASE_URI = 'mysql://dt_admin:dt2016@localhost:3308/dreamteam_db'it work now, thanks
make sure that there is no space or newline in the URI string
URL in the connection string is not valid.
you can check the documentation on how the MySQL connection URLs need to be structured here : .
Example syntax for postgresql with psycopg2 driver it look like this :-
sql_alchemy_conn = postgresql+psycopg2://ubuntu@localhost:5432/airflow just had to remove the quotes
I was using like that:
sql_alchemy_conn = 'postgresql://user:password@host:port/db'And this worked:
sql_alchemy_conn = postgresql://user:password@host:port/db