ट्यूटोरियल लिंक : https://flask.palletsprojects.com/en/1.1। एक्स/ट्यूटोरियल/फैक्ट्री/

मैं वीएस कोड में विंडोज 10 पायथन 3.9.0 पर्यावरण पर आधिकारिक फ्लास्क ट्यूटोरियल का प्रयास कर रहा हूं, डीबी स्क्लाइट है।

निर्देशिका संरचना को परिभाषित किया है - Flask_Tutorial\Flaskr. नीचे मेरी init.py और db.py फ़ाइलें हैं।

init.py

import os

from flask import Flask

def create_app(test_config=None):
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_mapping(
        SECRET_KEY = 'DEV',
        DATABASE = os.path.join(app.instance_path, 'Flaskr.sqlite'),
    )

    if test_config is None:
        app.config.from_pyfile('config.py',silent=True)
    else:
        app.config.from_mapping(test_config)

    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass
    
    @app.route('/hello')
    def hello():
        return 'Hello World !'
    
    from . import db
    db.init_app(app)
     
    return app 

db.py

import sqlite3
import click
from flask import current_app, g
from flask.cli import with_appcontext

def get_db():
    if 'db' not in g:
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        g.db.row_factory = sqlite3.Row

def close_db(e=None):
    db = g.pop('db', None)
    if db is not None:
        db.close()

def init_db():
    db = get_db()

    with current_app.open_resource('schema.sql') as f:
        db.executescript(f.read().decode('utf8'))


@click.command('init-db')
@with_appcontext
def init_db_command():
    """Clear the existing data and create new tables."""
    init_db()
    click.echo('Initialized the database.')        

def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

sqlite.schema

DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;

CREATE TABLE user (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT UNIQUE NOT NULL,
  password TEXT NOT NULL
);

CREATE TABLE post (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  author_id INTEGER NOT NULL,
  created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  FOREIGN KEY (author_id) REFERENCES user (id)
);

आगे मैं चर सेट करता हूं:

> set FLASK_APP=flaskr
> set FLASK_ENV=development

अब जब मैं फ्लास्क फ़ोल्डर से flask init-db चलाता हूं, तो मुझे निम्न त्रुटि मिलती है:

विशेषता त्रुटि: 'कोई नहीं' ऑब्जेक्ट में कोई विशेषता नहीं है 'निष्पादन स्क्रिप्ट'

Flaskr.sqlite उत्पन्न होता है, लेकिन मुझे डेटाबेस में तालिकाएँ नहीं दिखाई देती हैं।

मैं देख सकता हूं कि टेबल्स बनाने में कोई समस्या है और इसलिए त्रुटि के कारण कोई नहीं लौटाया जाता है।

क्या कोई मदद कर सकता है?

त्रुटि स्नैपशॉट

0
Sachin 15 सितंबर 2020, 07:48

1 उत्तर

सबसे बढ़िया उत्तर

मुझे एहसास हुआ कि मैं डेटाबेस के लिए रिटर्न स्टेटमेंट से चूक गया था। इसे जोड़ने के बाद, यह सुचारू रूप से काम करता है।

नीचे db.py ठीक किया गया:

import sqlite3
import click
from flask import current_app, g
from flask.cli import with_appcontext

def get_db():
    if 'db' not in g:
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        g.db.row_factory = sqlite3.Row

    return g.db

def close_db(e=None):
    db = g.pop('db', None)
    if db is not None:
        db.close()

def init_db():
    db = get_db()

    with current_app.open_resource('schema.sql') as f:
        db.executescript(f.read().decode('utf8'))


@click.command('init-db')
@with_appcontext
def init_db_command():
    """Clear the existing data and create new tables."""
    init_db()
    click.echo('Initialized the database.')        

def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command) ```

Had missed the '''return g.db''' statement.
0
Sachin 15 सितंबर 2020, 11:19