使用flask-sqlacodegen生成module时报错,请各位指导下



(venv) PS F:\Pythonfiles\ericsson> python -m sqlacodegen.main --flask --outfile common/models/user.py mysql+pymysql://root:Lj_123456@192.168.188.128:3306/mysql --tables user                                        
Traceback (most recent call last):
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
    self.dialect.do_execute(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\default.py", line 747, in do_execute
    cursor.execute(statement, parameters)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\cursors.py", line 148, in execute
    result = self._query(query)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\cursors.py", line 310, in _query
    conn.query(q)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 548, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 775, in _read_query_result
    result.read()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 1156, in read
    first_packet = self.connection._read_packet()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
    packet.raise_for_error()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.OperationalError: (1049, "Unknown database 'Engine(mysql+pymysql://root:***@192.168.188.128:3306/mysql)'")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlacodegen\main.py", line 66, in <module>
    main()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlacodegen\main.py", line 57, in main
    metadata.reflect(engine, args.schema, not args.noviews, tables)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\sql\schema.py", line 5466, in reflect
    insp.get_table_names(schema)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\reflection.py", line 397, in get_table_names
    return self.dialect.get_table_names(
  File "", line 2, in get_table_names
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\reflection.py", line 97, in cache
    ret = fn(self, con, *args, **kw)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\dialects\mysql\base.py", line 2885, in get_table_names
    rp = connection.exec_driver_sql(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1772, in exec_driver_sql
    ret = self._execute_context(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1842, in _execute_context
    return self._exec_single_context(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1983, in _exec_single_context
    self._handle_dbapi_exception(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 2325, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1964, in _exec_single_context
    self.dialect.do_execute(
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\sqlalchemy\engine\default.py", line 747, in do_execute
    cursor.execute(statement, parameters)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\cursors.py", line 148, in execute
    result = self._query(query)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\cursors.py", line 310, in _query
    conn.query(q)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 548, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
    result.read()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 1156, in read
    first_packet = self.connection._read_packet()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
    packet.raise_for_error()
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
    err.raise_mysql_exception(self._data)
  File "F:\Pythonfiles\ericsson\venv\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
    raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1049, "Unknown database 'Engine(mysql+pymysql://root:***@192.168.188.128:3306/mysql)'")
[SQL: SHOW FULL TABLES FROM `Engine(mysql+pymysql://root:***@192.168.188.128:3306/mysql)`]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

engine的结构是这样的:
mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}
现在你写的是:
mysql+pymysql://root:***@192.168.188.128:3306/mysql
对照下,你是要连mysql数据库吗?现在的错误就是数据库有问题

有帮助的话,请点采纳呀~

你这应该是命令行连接数据库和配置连接数据库混用了,命令行是:


python -m sqlacodegen.main --flask --outfile common/models/user.py mysql://root:Lj_123456@192.168.188.128:3306/mysql --tables user

而在config.py配置中才是:

DB_USERNAME = 'root'
DB_PASSWORD = 'Lj_123456'
DB_HOST = '192.168.188.128'
DB_PORT = '3306'
DB_NAME = 'mysql'
DB_URI = 'mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8' % (DB_USERNAME,DB_PASSWORD,DB_HOST,DB_PORT,DB_NAME)

以下答案引用自GPT-3大模型,请合理使用:

示例,谢谢

答:可能是在使用flask-sqlacodegen的时候,没有加载mysql的数据库。因此可以先创建一个新的MySQL数据库,然后再调用sqlacodegen命令,例如:
python -m sqlacodegen.main --flask --outfile common/models/user.py mysql+pymysql://root:Lj_123456@192.168.188.128:3306/newdb --tables user

如果我的回答解决了您的问题,请采纳我的回答