postgresql 404页面未找到

quhf5bfb  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(3)|浏览(115)

我试图使用sqlacodegen与postgresql自动生成数据库模型从我的数据库,但它不断显示我这个导入错误

  1. >sqlacodegen postgresql://postgres:j1234@localhost:4040/db1
  2. Traceback (most recent call last):
  3. File "<frozen runpy>", line 198, in _run_module_as_main
  4. File "<frozen runpy>", line 88, in _run_code
  5. File "C:\Users\user\AppData\Local\Programs\Python\Python311\Scripts\sqlacodegen.exe\__main__.py", line 4, in <module>
  6. File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlacodegen\main.py", line 11, in <module>
  7. from sqlacodegen.codegen import CodeGenerator
  8. File "C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\site-packages\sqlacodegen\codegen.py", line 9, in <module>
  9. from inspect import ArgSpec
  10. ImportError: cannot import name 'ArgSpec' from 'inspect' (C:\Users\user\AppData\Local\Programs\Python\Python311\Lib\inspect.py)

字符串
我正在使用python 3.11,postgresql,sqlalchemy 2.0.15和sqlacodegen 2.3.0
我想从我的数据库中为我的fastapi自动生成数据库模型。我也愿意接受任何类型的sqlacodegen替代方案

3zwjbxry

3zwjbxry1#

我也遇到了这个问题,因为Python 3.11中删除了ArgSpec。
解决方案是在文本编辑器中打开/site-packages/sqlacodegen/codegen.py文件。然后,删除第9行包含from inspect import ArgSpec的行。此外,删除第486和488行,将其替换为return False,然后再次运行命令。它应该可以正常工作。

mm5n2pyu

mm5n2pyu2#

为了补充其他人提到的问题,SQLAcodegen-v2没有这个问题,并且可以在Python 3.11(使用SQLAlchemy 2.0)上运行良好。

p4rjhz4m

p4rjhz4m3#

目前,sqlacodegen与3.11不兼容。因此,作为一种变通方法(就像@yusufusta建议的那样)

  • venv/Lib/site-packages/sqlacodegen/codegen.py
  • 删除ArgSpec
  • 通过这些更改以下函数:
  1. def _getargspec_init(method):
  2. try:
  3. if hasattr(inspect, 'getfullargspec'):
  4. fullargspec = inspect.getfullargspec(method)
  5. return {
  6. 'args': fullargspec.args,
  7. 'varargs': fullargspec.varargs,
  8. 'varkw': fullargspec.varkw,
  9. 'defaults': fullargspec.defaults
  10. }
  11. else:
  12. argspec = inspect.getargspec(method)
  13. return {
  14. 'args': argspec.args,
  15. 'varargs': argspec.varargs,
  16. 'varkw': argspec.varkw,
  17. 'defaults': argspec.defaults
  18. }
  19. except TypeError:
  20. if method is object.__init__:
  21. return {
  22. 'args': ['self'],
  23. 'varargs': None,
  24. 'varkw': None,
  25. 'defaults': None
  26. }
  27. else:
  28. return {
  29. 'args': ['self'],
  30. 'varargs': 'args',
  31. 'varkw': 'kwargs',
  32. 'defaults': None
  33. }
  34. @classmethod
  35. def render_column_type(cls, coltype):
  36. args = []
  37. kwargs = OrderedDict()
  38. argspec = cls._getargspec_init(coltype.__class__.__init__)
  39. defaults = dict(zip(argspec['args'][-len(argspec['defaults'] or ()):],
  40. argspec['defaults'] or ()))
  41. missing = object()
  42. use_kwargs = False
  43. for attr in argspec['args'][1:]:
  44. # Remove annoyances like _warn_on_bytestring
  45. if attr.startswith('_'):
  46. continue
  47. value = getattr(coltype, attr, missing)
  48. default = defaults.get(attr, missing)
  49. if value is missing or value == default:
  50. use_kwargs = True
  51. elif use_kwargs:
  52. kwargs[attr] = repr(value)
  53. else:
  54. args.append(repr(value))
  55. if argspec['varargs'] and hasattr(coltype, argspec['varargs']):
  56. varargs_repr = [repr(arg) for arg in getattr(coltype, argspec['varargs'])]
  57. args.extend(varargs_repr)
  58. if isinstance(coltype, Enum) and coltype.name is not None:
  59. kwargs['name'] = repr(coltype.name)
  60. for key, value in kwargs.items():
  61. args.append('{}={}'.format(key, value))
  62. rendered = coltype.__class__.__name__
  63. if args:
  64. rendered += '({0})'.format(', '.join(args))
  65. return rendered

字符串

展开查看全部

相关问题