我在python中使用SQLAlchemy数据库,数据库中的字符是编码的,当我用文本文件打开时无法理解。有人知道我是否可以使数据库文件字符可读吗?任何答案都将是appriciated。
这是我的数据库,
SQLite format 3@ %%.O}
\\Å!Ç%tablepostpostCREATE TABLE post (
id INTEGER NOT NULL,
title VARCHAR(30) NOT NULL,
detail VARCHAR(100),
due DATETIME NOT NULL,
PRIMARY KEY (id)
)
@œ
œÕñœîU°?++A„ÅÇ„ÅÑ„ÅÜ„Åà„Åä„Åã„Åç„Åè„Åë„Åì2021-11-30 00:00:00.000000°;+#Atestings clasekasdsdasdasd2021-11-26 00:00:00.000000< -'ASADADASDAXDSACDAASDASDASDAXAE2021-11-19 00:00:00.0000001Atest45454two pills2021-11-05 00:00:00.000000VAMedicine44 meds2021-10-27 00:00:00.000000êAtesttestone pill2021-10-25 00:05%!AAndy's pillsfour pills2021-11-03 00:00:00.0000001
字符串
我希望这些文字是可读的
下面是我的Python代码
from datetime import datetime, date
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///medicine-app.db'
db = SQLAlchemy(app)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(30), nullable=False)
detail = db.Column(db.String(100))
due = db.Column(db.DateTime, nullable=False)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
posts = Post.query.order_by(Post.due).all()
return render_template('index.html', posts=posts, today=date.today())
else:
title = request.form.get('title')
detail = request.form.get('detail')
due = request.form.get('due')
due = datetime.strptime(due, '%Y-%m-%d')
new_post = Post(title=title, detail=detail, due=due) #making a new post from create
db.session.add(new_post)
db.session.commit()
return redirect('/')
@app.route('/create')
def create():
return render_template('create.html')
@app.route('/detail/<int:id>')
def read(id):
post = Post.query.get(id)
return render_template('detail.html', post=post)
@app.route('/update/<int:id>', methods=['GET', 'POST'])
def update(id):
post = Post.query.get(id)
if request.method == 'GET':
return render_template('update.html', post=post)
#update paged
else:
post.title = request.form.get('title')
post.detail = request.form.get('detail')
request.form.get('due')
post.due = datetime.strftime, '%Y-%m-%d'
db.session.commit()
return redirect('/')
#to database
#top page
@app.route('/delete/<int:id>')
def delete(id):
post = Post.query.get(id)
db.session.delete(post)
db.session.commit()
return redirect('/')
if __name__ == '__main__':
app.run(debug=True)
型
我也用HTML
2条答案
按热度按时间hsvhsicv1#
数据库中的字符是编码的,当我打开文本文件时无法理解。2有人知道我可以让数据库文件的字符可读吗?
不能。SQLite数据库文件是二进制文件,而不是文本文件。在文本编辑器中打开它们只会产生半可读的结果,因为无论字符编码如何,并非所有字节(或字节序列)都表示有效字符。
在Linux上,SQLite文件的hexdump(hd)看起来像这样:
字符串
如果您希望该文件中特定表格的 * 内容 * 为文本可读形式,则可以将该表格导出为CSV文件(或类似文件)。
nkcskrwz2#
下面是一个快速而肮脏的shell脚本,用于将每个表导出到table.csv,最后导出到dbfile.sql整个模式
字符串
复制该代码,因为它是在文件forexample sqlite2csv.sh,然后运行
型
你会得到所有的表CSV和模式文件。尝试它,并给给予我反馈,如果有任何问题。