我尝试添加到我的sqlalchemy数据库,将所有电影标题从txt文件添加为项目。
但似乎我可以使用通常的方法(如open('filename')
)读取我的应用程序文件中的txt文件。
所以我尝试在另一个文件中,但我没有设法导入数据库(数据库)
它发给我一个错误:
ImportError: cannot import name 'db' from '__main__' (/home/chrys/deploy/initdata.py)
目录:
deploy/
|api.py #the app file
|initdata.py # the file where i try to import title fom txt file
这里的initdata代码:
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from . import db
from api import Movie
file = open("movie_t-utf8.txt", "r")
to_add =[]
for line in file.readlines():
item = line.split('|')
if item[1][-1:] == '\n':
item[1] = item[1][:-1]
film = Movie(id = item[0], title=item[1])
db.session.add(film)
db.session.commit()
这里是api代码:
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
#print(os.listdir("../deploy"))
app = Flask(__name__)
app.config["DEBUG"] = True
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
username="user",
password="00000000",
hostname="user.mysql.pythonanywhere-services.com",
databasename="user$movies",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
ma = Marshmallow(app)
class Movie(db.Model):
__tablename__ = "movies"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200))
db.drop_all()
db.create_all()
film = Movie(id = 1, title="Star Wars")
db.session.add(film)
db.session.commit()
class MovieSchema(ma.ModelSchema):
class Meta:
model = Movie
@app.route('/', methods=['GET'])
def index():
return jsonify({'message' : 'Deployeeeeded'})
@app.route('/film', methods=['GET'])
def returnAll():
one_film = Movie.query.first()
movie_schema = MovieSchema()
output = movie_schema.dump(one_film).data
return jsonify({ 'film' : output})
if __name__ == '__main__':
app.run()
预先感谢您的任何帮助
我不确定你要做什么,但如果你只想从txt导入你的数据库,你应该考虑使用Flask-Script。
我的一个项目示例:
from config import Config
from edulya.app import create_app
app = create_app(Config)
from flask_script import Manager
from edulya.app import db
path = os.path.realpath(os.path.dirname(__file__))
manager = Manager(app)
@manager.command
def init_schools():
with open(
os.path.join(
path, 'edulya', 'static_data', 'fr-en-annuaire-education.json'
), 'r'
) as file:
json_data = ujson.loads(file.read())
for data in json_data:
School.from_json(data)
和School.from_json看起来像这样:
class School(db.Model):
@staticmethod
def from_json(data):
school = School(
id_commune=data['code_commune'],
id_academie=data['code_academie'],
status=data['statut_public_prive'],
updated=datetime.strptime(data['date_maj_ligne'], '%Y-%m-%d')
)
db.session.add(school)
db.session.commit()
然后py manager.py init_schools