mysql 无法使用sqlalchemy创建表

bq8i3lrv  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(187)

我试图通过使用sqlalchemy创建mysql数据库,并运行到这个错误。添加一个错误的完整追溯:

  1. Traceback (most recent call last):
  2. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 145, in __init__
  3. self._dbapi_connection = engine.raw_connection()
  4. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3292, in raw_connection
  5. return self.pool.connect()
  6. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 452, in connect
  7. return _ConnectionFairy._checkout(self)
  8. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 1269, in _checkout
  9. fairy = _ConnectionRecord.checkout(pool)
  10. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 716, in checkout
  11. rec = pool._do_get()
  12. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 169, in _do_get
  13. with util.safe_reraise():
  14. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
  15. raise exc_value.with_traceback(exc_tb)
  16. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 167, in _do_get
  17. return self._create_connection()
  18. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 393, in _create_connection
  19. return _ConnectionRecord(self)
  20. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 678, in __init__
  21. self.__connect()
  22. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 902, in __connect
  23. with util.safe_reraise():
  24. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
  25. raise exc_value.with_traceback(exc_tb)
  26. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 898, in __connect
  27. self.dbapi_connection = connection = pool._invoke_creator(self)
  28. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 637, in connect
  29. return dialect.connect(*cargs, **cparams)
  30. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 616, in connect
  31. return self.loaded_dbapi.connect(*cargs, **cparams)
  32. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 353, in __init__
  33. self.connect()
  34. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 633, in connect
  35. self._request_authentication()
  36. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 932, in _request_authentication
  37. auth_packet = _auth.caching_sha2_password_auth(self, auth_packet)
  38. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\_auth.py", line 239, in caching_sha2_password_auth
  39. pkt = conn._read_packet()
  40. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
  41. packet.raise_for_error()
  42. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
  43. err.raise_mysql_exception(self._data)
  44. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
  45. raise errorclass(errno, errval)
  46. pymysql.err.OperationalError: (1049, "Unknown database 'books'")
  47. The above exception was the direct cause of the following exception:
  48. Traceback (most recent call last):
  49. File "C:\Program Files\JetBrains\PyCharm 2023.3\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcode
  50. coro = func()
  51. File "<input>", line 1, in <module>
  52. File "C:\Program Files\JetBrains\PyCharm 2023.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile
  53. pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
  54. File "C:\Program Files\JetBrains\PyCharm 2023.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
  55. exec(compile(contents+"\n", file, 'exec'), glob, loc)
  56. File "C:\Users\baron\Python_Darbai\Turing_college\GIT\Sprint_3\dbaron-DE1.3\test_db_creaton.py", line 183, in <module>
  57. db_manager.create_database()
  58. File "C:\Users\baron\Python_Darbai\Turing_college\GIT\Sprint_3\dbaron-DE1.3\test_db_creaton.py", line 29, in create_database
  59. self.session.execute(create_database_query)
  60. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 2308, in execute
  61. return self._execute_internal(
  62. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 2180, in _execute_internal
  63. conn = self._connection_for_bind(bind)
  64. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 2047, in _connection_for_bind
  65. return trans._connection_for_bind(engine, execution_options)
  66. File "<string>", line 2, in _connection_for_bind
  67. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\state_changes.py", line 139, in _go
  68. ret_value = fn(self, *arg, **kw)
  69. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\orm\session.py", line 1143, in _connection_for_bind
  70. conn = bind.connect()
  71. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3268, in connect
  72. return self._connection_cls(self)
  73. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 147, in __init__
  74. Connection._handle_dbapi_exception_noconnection(
  75. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 2430, in _handle_dbapi_exception_noconnection
  76. raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  77. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 145, in __init__
  78. self._dbapi_connection = engine.raw_connection()
  79. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\base.py", line 3292, in raw_connection
  80. return self.pool.connect()
  81. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 452, in connect
  82. return _ConnectionFairy._checkout(self)
  83. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 1269, in _checkout
  84. fairy = _ConnectionRecord.checkout(pool)
  85. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 716, in checkout
  86. rec = pool._do_get()
  87. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 169, in _do_get
  88. with util.safe_reraise():
  89. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
  90. raise exc_value.with_traceback(exc_tb)
  91. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\impl.py", line 167, in _do_get
  92. return self._create_connection()
  93. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 393, in _create_connection
  94. return _ConnectionRecord(self)
  95. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 678, in __init__
  96. self.__connect()
  97. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 902, in __connect
  98. with util.safe_reraise():
  99. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 146, in __exit__
  100. raise exc_value.with_traceback(exc_tb)
  101. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\pool\base.py", line 898, in __connect
  102. self.dbapi_connection = connection = pool._invoke_creator(self)
  103. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 637, in connect
  104. return dialect.connect(*cargs, **cparams)
  105. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\default.py", line 616, in connect
  106. return self.loaded_dbapi.connect(*cargs, **cparams)
  107. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 353, in __init__
  108. self.connect()
  109. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 633, in connect
  110. self._request_authentication()
  111. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 932, in _request_authentication
  112. auth_packet = _auth.caching_sha2_password_auth(self, auth_packet)
  113. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\_auth.py", line 239, in caching_sha2_password_auth
  114. pkt = conn._read_packet()
  115. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\connections.py", line 725, in _read_packet
  116. packet.raise_for_error()
  117. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\protocol.py", line 221, in raise_for_error
  118. err.raise_mysql_exception(self._data)
  119. File "C:\Users\baron\AppData\Local\Programs\Python\Python310\lib\site-packages\pymysql\err.py", line 143, in raise_mysql_exception
  120. raise errorclass(errno, errval)
  121. sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1049, "Unknown database 'books'")
  122. (Background on this error at: https://sqlalche.me/e/20/e3q8)

字符串
所有数据库凭据都在. env文件中。添加代码片段,可能有问题:

  1. from sqlalchemy import Column, Integer, String, ForeignKey, Float
  2. from sqlalchemy.orm import relationship, declarative_base
  3. import os
  4. from dotenv import load_dotenv
  5. from sqlalchemy import create_engine, text
  6. from sqlalchemy.orm import sessionmaker
  7. import pymysql
  8. Base = declarative_base()
  9. class DatabaseManager:
  10. def __init__(self):
  11. load_dotenv()
  12. self.root_username = os.getenv("ROOT_USERNAME")
  13. self.root_password = os.getenv("ROOT_PASSWORD")
  14. self.new_database = os.getenv("NEW_DATABASE")
  15. if None in [self.root_username, self.root_password, self.new_database]:
  16. raise ValueError("Missing environment variables")
  17. self.DB_URI = f"mysql+pymysql://{self.root_username}:{self.root_password}@localhost/{self.new_database}"
  18. self.engine = create_engine(self.DB_URI, echo=True)
  19. self.Session = sessionmaker(bind=self.engine)
  20. self.session = self.Session()
  21. def create_database(self):
  22. create_database_query = text(f"CREATE DATABASE IF NOT EXISTS {self.new_database}")
  23. self.session.execute(create_database_query)
  24. self.session.commit()
  25. def create_tables(self):
  26. Base.metadata.create_all(self.engine)
  27. def close_connection(self):
  28. self.session.close()


我的这部分代码有什么问题(没有全部添加,因为它太长了,而且基本上只有表)?

mwg9r5ms

mwg9r5ms1#

在运行这段代码之前,您必须创建数据库books。SQLAlchemy不会为您创建数据库,它认为数据库已经存在

相关问题