กำลังอัพโหลดเอกสาร pdf กับภาษา sql-alchemy ภาษาไพธอนใช้แก้จุดเหลือ

0

คำถาม

ผมพยายามที่จะอัพโหลดหนังสือที่จะ sqlite3 อยู่ในรูปแบบของเอกสาร pdf. ฉันเขียนมันรหัสนั่น uploads:

  • ผู้เขียน
  • หัวเรื่อง
  • เอกสาร pdf ของเรื่องแต่งแก้จุดเหลือส่วนดูเหมือนจะไม่ได้ทำงานอยู่:
class Book(UserMixin, db.Model):

        id = db.Column(db.Integer, primary_key=True)
        author = db.Column(db.String(50), unique=False)
        title = db.Column(db.String(50), unique=False)
        pdf= db.Column(db.Blob(10000000))
    
    @app.route('/uploadStory', methods=['GET', 'POST'])
    def uploadStory():
        new_book = Book(author=form.author.data, title=form.title.data, pdf=form.pdf.data)
        db.session.add(new_book)
        db.session.commit()

ยังไงฉันยืนยันของผู้ใช้สามารถอัพโหลดหนังสือผ่านทางเอกสาร PDF? เข้าท่าดีนิเราจะทำทุกอย่างที่เราทำ

  • ฉันต้องการทะเบียนผู้ใช้ให้อัพโหลดเรื่องทั้งหมด
  • ฉันต้องการแก้จุดเหลือของขนาดต้องเป็นไปอย่างใหญ่
  • ฉันไม่อยากจะเก็บเรื่องในท้องถิ่นแล้วใช้เส้นทาง
  • ฉันต้องการจะจัดเก็บพวกเขาใช้แก้จุดเหลือ
blob flask python sql
2021-11-20 05:52:53
1

คำตอบที่ดีที่สุด

0

ฉันไม่รู้ว่าจะทำอย่างนี้ใช้ SQLAlchemy แต่นี่คือควานิลลาดีครับไพธอน/ขวดทาง:

from flask import Flask, render_template, request, redirect, url_for
import sqlite3

app = Flask(__name__)

def insert_user_data(author, title, pdf):
    con = sqlite3.connect("user_data.sqlite")
    cur = con.cursor()
    query = """
        INSERT IGNORE INTO user_data (author, title, pdf) VALUES (?, ?, ?);
    """
    cur.execute(query, [author, title, pdf])
    con.commit()


@app.route("/", methods=["GET", "POST"])
def home():
    if request.method == "POST":
        pdf = request.files["pdf"].read()
        author = request.form["author"]
        title = request.form["title"]
        insert_user_data(author, title, pdf)
        return redirect(url_for("home"))

    return render_template("index.html")

นั่นถือว่านี้ DB รูปแบบชุดสี:

CREATE TABLE IF NOT EXISTS user_data (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    author TEXT,
    title TEXT,
    pdf BLOB
);

และเรียบง่าย index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Save PDF</title>
    <style>
        input {
            display: block;
        }
    </style>
</head>
<body>
    <form method="POST" action="{{ url_for('home') }}" enctype="multipart/form-data">
        <input type="text" name="author" placeholder="author" />
        <input type="text" name="title" placeholder="title" />
        <input type="file" name="pdf" />
        <button type="submit">Submit</button>
    </form>
</body>
</html>

ตอนที่ฉันวิ่งไปแล้วก็วิ่งอีกสคริปต์ที่จะดึง pdf จาก DB และเขียนลงแฟ้ม(ต้องดูกันถ้ามันทำงาน)ทุกอย่างดูดี:

import sqlite3

con = sqlite3.connect("user_data.sqlite")
cur = con.cursor()

query = """
    SELECT pdf FROM user_data WHERE id = 1;
"""

result = cur.execute(query).fetchone()[0]

with open("think-python.pdf", mode="wb") as file:
    file.write(result)

นี่คือผลลัพธ์จากแฟ้มโครงสร้าง:

➜  blob-pdf ls
app.py  main.py  __pycache__  schema.sql  templates  think-python.pdf  user  user_data.sqlite
➜  blob-pdf file think-python.pdf
think-python.pdf: PDF document, version 1.5

และนี่คือแฟ้มหลังจากดึงมาจาก DB:

Think Python

2021-11-20 06:22:13

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่