【问题标题】:Cannot perform relative import (flask/pycharm)无法执行相对导入(flask/pycharm)
【发布时间】:2015-09-14 05:13:44
【问题描述】:

我对编程很陌生。 我正在使用 Pycharm IDE 和烧瓶框架。 我现在正在尝试使用 SQLAlchemy,当我尝试运行查询 (db_create.py) 以在数据库中添加内容时,它返回“系统错误:未加载父模块,无法执行相对导入”。

从我在互联网上收集的信息来看,这似乎是一个 Pycharm 问题,但我真的不明白如何解决它。

请问有人有意见吗?

作为参考,我的项目结构如下(pjctBB 应该列在表格中,因为它是 pjctMain 的一部分)。

非常感谢您花时间阅读本文并帮助我退出。 提前致谢!

pjctMain
├── run.py
pjctBB
├── __init__.py
├── models.py
├── views.py
├── pjctbb_sg.db 
└── db_create.py

我的 run.py:

from pjctBB import app
import os

app.secret_key = os.urandom(24)
app.run(debug=True)

我的初始化

from .views import app
from .models import *

我的 models.py 包含以下内容:

from .views import db


class User(db.Model):

    __tablename__ = "users"

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String, nullable=False)
    username = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    rank = db.Column(db.Integer, nullable=False)

    def __init__(self, email, username, password, rank):
        self.email = email
        self.username = username
        self.password = password
        self.rank = rank

我的(部分)views.py 有以下内容:

from flask import Flask, \
                  render_template, request, redirect, url_for, session, flash, json
# from .models import register1
import os
from flask_sqlalchemy import SQLAlchemy
#import sqlite3


#from passlib.hash import bcrypt
from functools import wraps

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///pjctbb_sg.db'

# Create SQLAlchemy object
db = SQLAlchemy(app)

最后,我的 db_create.py:

from .views import db
from .models import User

db.create_all()

db.session.add(User("test@test.com", "test", "000000", "50"))

db.session.commit()

【问题讨论】:

标签: python sql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

按照你的方式做,我得到这个 ValueError:

Traceback (most recent call last):
   File "__init__.py", line 1, in <module>
       from .test import Chris

在测试前取出. 对我有用。

或者

root   
pjct
├── pjctBB
    ├── __init__.py
    ├── models.py
    ├── views.py
    ├── pjctbb_sg.db 
    └── db_create.py
├── setup.py

setup.py 的位置:

from setuptools import setup, find_packages

if __name__ == "__main__":
    setup(
        name = "pjctBB",
        packages = find_packages(),
        version = "0.1.0"
    )

python setup.py develop允许你通过

导入
from pjctBB.models import *
from pjctBB.views import *

【讨论】:

  • 大家好,感谢您帮助我。我试着服用 .出来了,但没有用。我创建了“setup.py”文件并按照建议修改了导入,它可以工作。我想我必须尽快阅读有关 Setuptools 的信息!真的很感激,谢谢!只是一个简单的问题:我不应该将 setup.py 代码添加到我的“run.py 中以使其执行吗?(或从 run.py 调用它?)谢谢
  • 您只需要运行一次 setup.py。无论您身在何处,它都会将此项目安装为由 python 导入的包。 develop 命令基本上意味着您在项目中所做的更改将反映已安装的包。
【解决方案2】:

您忘记在 db_create.py 中插入 id 列

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多