Python 自定义ID烧瓶Sql炼金术
我正在尝试在表中创建自定义ID。我想要的身份证: 1909001 1909002 基本上格式是yymm+计数器,我想做一个查询来检查model类中的最后一个id。尝试使用此代码,但仍然没有成功Python 自定义ID烧瓶Sql炼金术,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我正在尝试在表中创建自定义ID。我想要的身份证: 1909001 1909002 基本上格式是yymm+计数器,我想做一个查询来检查model类中的最后一个id。尝试使用此代码,但仍然没有成功 class Task(db.Model): task_id = db.Column(db.Integer, primary_key=True) subject = db.Column(db.String(100), nullable=False) request_dt = db.C
class Task(db.Model):
task_id = db.Column(db.Integer, primary_key=True)
subject = db.Column(db.String(100), nullable=False)
request_dt = db.Column(db.DateTime, nullable=False)
request_detail = db.Column(db.Text, nullable=False)
requestor = db.Column(db.String(100), nullable=False)
def get_last_id(self):
ym = date.today().strftime("%y%m")
qry = self.query.filter(self.task_id.like("{}".format(ym))).order_by(self.task_id.desc()).first()
if qry.task_id == '':
return ym + '001'
else:
lastid = qry.task_id
return "{:02d}".format(int(lastid[-3:]) + 1)
def __init__(self, subject, req_dt, req_detail, reqtor):
self.task_id = self.get_last_id()
self.subject = subject
self.request_detail = req_detail
self.request_dt = req_dt
self.requestor = reqtor
我写了一个小烧瓶应用程序,可以帮助你回答你的问题 您将获得与您尝试获取的格式相同的自定义id app.py
from datetime import datetime, date
from flask import Flask, render_template, request, redirect, url_for
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm, CSRFProtect
from sqlalchemy import desc
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config.from_pyfile('config.py')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
SQLALCHEMY_DATABASE_URI = app.config['SQLALCHEMY_DATABASE_URI']
app.config['SECRET_KEY'] = app.config['SECRET_KEY']
csrf = CSRFProtect(app)
WTF_CSRF_SECRET_KEY = app.config['SECRET_KEY']
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
custom_id = db.Column(db.String(), nullable=False)
subject = db.Column(db.String(), nullable=False)
request_detail = db.Column(db.String(), nullable=False)
request_dt = db.Column(db.String(), nullable=False)
request_or = db.Column(db.String(), nullable=False)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
def get_last_id():
qry = Task.query.order_by(Task.id.desc()).first()
x = qry.id
ym = date.today().strftime("%y%m")
q_custom_id = "" + ym + str(x).zfill(3) + ""
return q_custom_id
def __init__(self, custom_id, subject, request_detail, request_dt, request_or):
self.custom_id = custom_id
self.subject = subject
self.request_detail = request_detail
self.request_dt = request_dt
self.request_or = request_or
class TaskForm(FlaskForm):
subject = StringField(u'subject')
request_detail = StringField(u'request_detail')
request_dt = StringField(u'request_dt')
request_or = StringField(u'request_or')
submit = SubmitField('Save Post')
@app.route('/')
def id_order_task():
task_id = Task.query.order_by(Task.date.desc())
return render_template('index.html', task_id=task_id)
@app.route('/set-task', methods=['GET', 'POST'])
def set_task():
form = TaskForm()
try:
get_id = Task.query.order_by(desc('id')).first()
x: int = get_id.id + 1
y = date.today().strftime("%y%m")
if get_id:
custom_id = "" + y + str(x).zfill(3) + ""
except:
custom_id = str(date.today().strftime("%y%m") + str(1).zfill(3))
finally:
if request.method == 'POST':
add_task = Task(
custom_id=custom_id,
subject=request.form['subject'],
request_detail=request.form['request_detail'],
request_dt=request.form['request_dt'],
request_or=request.form['request_or']
)
db.session.add(add_task)
db.session.commit()
return redirect(url_for('id_order_task'))
return render_template('set-task.html', form=form)
if __name__ == '__main__':
app.run()
设置任务.html
<div>
<form action="{{ url_for('set_task') }}" method="post">
{{ form.csrf_token }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.request_detail.label }}
{{ form.request_detail }}
{{ form.request_dt.label }}
{{ form.request_dt }}
{{ form.request_or.label }}
{{ form.request_or }}
{{ form.submit }}
</form>
</div>
<style>
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
th, td {
padding: 15px;
text-align: left;
}
</style>
<table>
<thead>
<tr>
<th>id</th>
<th>custom_id</th>
<th>subject</th>
<th>request_detail</th>
<th>request_dt</th>
<th>request_or</th>
<th>date</th>
</tr>
</thead>
<tbody>
{% for i in task_id %}
<tr>
<td>{{ i.id }}</td>
<td>{{ i.custom_id}}</td>
<td>{{ i.subject }}</td>
<td>{{ i.request_detail }}</td>
<td>{{ i.request_dt }}</td>
<td>{{ i.request_or }}</td>
<td>{{ i.date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{form.csrf_token}
{{form.subject.label}
{{form.subject}}
{{form.request_detail.label}
{{form.request_detail}
{{form.request_dt.label}
{{form.request_dt}}
{{form.request_或.label}
{{form.request_或}
{{form.submit}
index.html
<div>
<form action="{{ url_for('set_task') }}" method="post">
{{ form.csrf_token }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.request_detail.label }}
{{ form.request_detail }}
{{ form.request_dt.label }}
{{ form.request_dt }}
{{ form.request_or.label }}
{{ form.request_or }}
{{ form.submit }}
</form>
</div>
<style>
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
th, td {
padding: 15px;
text-align: left;
}
</style>
<table>
<thead>
<tr>
<th>id</th>
<th>custom_id</th>
<th>subject</th>
<th>request_detail</th>
<th>request_dt</th>
<th>request_or</th>
<th>date</th>
</tr>
</thead>
<tbody>
{% for i in task_id %}
<tr>
<td>{{ i.id }}</td>
<td>{{ i.custom_id}}</td>
<td>{{ i.subject }}</td>
<td>{{ i.request_detail }}</td>
<td>{{ i.request_dt }}</td>
<td>{{ i.request_or }}</td>
<td>{{ i.date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
桌子{
边界塌陷:塌陷;
}
表,th,td{
边框:1px纯黑;
}
th,td{
填充:15px;
文本对齐:左对齐;
}
身份证件
自定义标识
主题
请求详细信息
请求
请求
日期
{task_id%中的i的%s}
{{i.id}
{{i.custom_id}
{{i.subject}}
{{i.request_detail}
{{i.request_dt}}
{{i.请求{u或}}
{{i.date}
{%endfor%}
我编写了一个小烧瓶应用程序,可以帮助你回答问题
您将获得与您尝试获取的格式相同的自定义id
app.py
from datetime import datetime, date
from flask import Flask, render_template, request, redirect, url_for
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm, CSRFProtect
from sqlalchemy import desc
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config.from_pyfile('config.py')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
SQLALCHEMY_DATABASE_URI = app.config['SQLALCHEMY_DATABASE_URI']
app.config['SECRET_KEY'] = app.config['SECRET_KEY']
csrf = CSRFProtect(app)
WTF_CSRF_SECRET_KEY = app.config['SECRET_KEY']
db = SQLAlchemy(app)
migrate = Migrate(app, db)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
custom_id = db.Column(db.String(), nullable=False)
subject = db.Column(db.String(), nullable=False)
request_detail = db.Column(db.String(), nullable=False)
request_dt = db.Column(db.String(), nullable=False)
request_or = db.Column(db.String(), nullable=False)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
def get_last_id():
qry = Task.query.order_by(Task.id.desc()).first()
x = qry.id
ym = date.today().strftime("%y%m")
q_custom_id = "" + ym + str(x).zfill(3) + ""
return q_custom_id
def __init__(self, custom_id, subject, request_detail, request_dt, request_or):
self.custom_id = custom_id
self.subject = subject
self.request_detail = request_detail
self.request_dt = request_dt
self.request_or = request_or
class TaskForm(FlaskForm):
subject = StringField(u'subject')
request_detail = StringField(u'request_detail')
request_dt = StringField(u'request_dt')
request_or = StringField(u'request_or')
submit = SubmitField('Save Post')
@app.route('/')
def id_order_task():
task_id = Task.query.order_by(Task.date.desc())
return render_template('index.html', task_id=task_id)
@app.route('/set-task', methods=['GET', 'POST'])
def set_task():
form = TaskForm()
try:
get_id = Task.query.order_by(desc('id')).first()
x: int = get_id.id + 1
y = date.today().strftime("%y%m")
if get_id:
custom_id = "" + y + str(x).zfill(3) + ""
except:
custom_id = str(date.today().strftime("%y%m") + str(1).zfill(3))
finally:
if request.method == 'POST':
add_task = Task(
custom_id=custom_id,
subject=request.form['subject'],
request_detail=request.form['request_detail'],
request_dt=request.form['request_dt'],
request_or=request.form['request_or']
)
db.session.add(add_task)
db.session.commit()
return redirect(url_for('id_order_task'))
return render_template('set-task.html', form=form)
if __name__ == '__main__':
app.run()
设置任务.html
<div>
<form action="{{ url_for('set_task') }}" method="post">
{{ form.csrf_token }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.request_detail.label }}
{{ form.request_detail }}
{{ form.request_dt.label }}
{{ form.request_dt }}
{{ form.request_or.label }}
{{ form.request_or }}
{{ form.submit }}
</form>
</div>
<style>
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
th, td {
padding: 15px;
text-align: left;
}
</style>
<table>
<thead>
<tr>
<th>id</th>
<th>custom_id</th>
<th>subject</th>
<th>request_detail</th>
<th>request_dt</th>
<th>request_or</th>
<th>date</th>
</tr>
</thead>
<tbody>
{% for i in task_id %}
<tr>
<td>{{ i.id }}</td>
<td>{{ i.custom_id}}</td>
<td>{{ i.subject }}</td>
<td>{{ i.request_detail }}</td>
<td>{{ i.request_dt }}</td>
<td>{{ i.request_or }}</td>
<td>{{ i.date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{{form.csrf_token}
{{form.subject.label}
{{form.subject}}
{{form.request_detail.label}
{{form.request_detail}
{{form.request_dt.label}
{{form.request_dt}}
{{form.request_或.label}
{{form.request_或}
{{form.submit}
index.html
<div>
<form action="{{ url_for('set_task') }}" method="post">
{{ form.csrf_token }}
{{ form.subject.label }}
{{ form.subject }}
{{ form.request_detail.label }}
{{ form.request_detail }}
{{ form.request_dt.label }}
{{ form.request_dt }}
{{ form.request_or.label }}
{{ form.request_or }}
{{ form.submit }}
</form>
</div>
<style>
table {
border-collapse: collapse;
}
table, th, td {
border: 1px solid black;
}
th, td {
padding: 15px;
text-align: left;
}
</style>
<table>
<thead>
<tr>
<th>id</th>
<th>custom_id</th>
<th>subject</th>
<th>request_detail</th>
<th>request_dt</th>
<th>request_or</th>
<th>date</th>
</tr>
</thead>
<tbody>
{% for i in task_id %}
<tr>
<td>{{ i.id }}</td>
<td>{{ i.custom_id}}</td>
<td>{{ i.subject }}</td>
<td>{{ i.request_detail }}</td>
<td>{{ i.request_dt }}</td>
<td>{{ i.request_or }}</td>
<td>{{ i.date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
桌子{
边界塌陷:塌陷;
}
表,th,td{
边框:1px纯黑;
}
th,td{
填充:15px;
文本对齐:左对齐;
}
身份证件
自定义标识
主题
请求详细信息
请求
请求
日期
{task_id%中的i的%s}
{{i.id}
{{i.custom_id}
{{i.subject}}
{{i.request_detail}
{{i.request_dt}}
{{i.请求{u或}}
{{i.date}
{%endfor%}
因此,基本上您可以返回id表单任务,只需将字符串添加在一起,然后zfill id即可
def get_last_id():
qry = Task.query.order_by(Task.id.desc()).first()
x = qry.id
ym = date.today().strftime("%y%m")
q_custom_id = "" + ym + str(x).zfill(3) + ""
return q_custom_id
# print(Task.get_last_id())
我在数据库上有3个ID,这将打印最后一个,ID 3将变成:
1909003
我希望这对您有所帮助:p因此基本上您可以返回id表单任务,只需将字符串添加到一起,然后zfill id
def get_last_id():
qry = Task.query.order_by(Task.id.desc()).first()
x = qry.id
ym = date.today().strftime("%y%m")
q_custom_id = "" + ym + str(x).zfill(3) + ""
return q_custom_id
# print(Task.get_last_id())
我在数据库上有3个ID,这将打印最后一个,ID 3将变成:
1909003
我希望这能帮助您:p如果一个月内有1000多个任务,会发生什么?你能详细说明一下你试图用这个结构化id字段解决的问题吗?我想这不会发生。基本上,我计划将团队中的任务分配从excel转移到基于web的。到目前为止,一个月最多只能完成10项任务。我不想改变传统的ID格式。如果一个月内有1000多个任务,会发生什么?你能详细说明一下你试图用这个结构化id字段解决的问题吗?我想这不会发生。基本上,我计划将团队中的任务分配从excel转移到基于web的。到目前为止,一个月最多只能完成10项任务。我不想更改旧的ID格式。嗨,蒂姆,谢谢你的代码。它起作用了!但是我只是想知道,我们可以在类任务中执行get_id(检查DB中的最后一个id)吗?嗨,Bimo,当我执行以下查询时,我得到了最后一个自定义id,我相信应该很容易添加到代码中
qry=Task.query.order\u by(Task.custom\u id.desc()).first()打印(qry.custom\u id)
您好,谢谢您的代码。它起作用了!但是我只是想知道,我们可以在类任务中执行get_id(检查DB中的最后一个id)吗?嗨,Bimo,当我执行以下查询时,我得到了最后一个自定义id,我相信应该很容易添加到代码中qry=Task.query.order\u by(Task.custom\u id.desc()).first()打印(qry.custom\u id)