环境:python 3.8、flask-sqlalchemy、postgres
class User(db.Model):
name = db.Column(db.Text)
birthday = db.Column(db.DateTime)
@classmethod
def upcoming_birthdays(cls):
return (cls.query
.filter("??")
.all()
)
Run Code Online (Sandbox Code Playgroud)
我想创建一个 sqlalchemy 查询来过滤 X 天内即将生日的用户。我考虑过使用该extract函数从生日中提取月份和日期,但这对于月底或年底的日子不起作用。我还考虑过尝试将生日转换为儒略日期以进行比较,但我不知道该怎么做。
例如,如果今天是 2020 年 8 月 30 日,它将返回用户的生日
感谢您的帮助
我正在尝试将我的 Flask 应用程序与 MySQL 数据库连接。这是 MySQL 数据
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.01 sec)
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| alchemy |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec) …Run Code Online (Sandbox Code Playgroud) 我的表内有一个字段,即时间
time = db.Column(db.Time, default=datetime.datetime.now().time(), nullable=False)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它一直默认为同一时间而不是实际的系统时间
"23:53:27.34808"
"20:10:29.613031"
"20:10:29.65371"
"20:10:29.230696"
"20:10:29.613031"
"01:40:41.962449"
"20:10:29.375499"
"09:48:38.981206"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.541895"
"10:42:38.56931"
"10:42:38.56931"
"10:42:38.56931"
"05:01:44.076726"
"10:42:38.56931"
"15:15:18.271026"
"07:29:20.49368"
"15:15:18.271026"
"15:15:18.271026"
Run Code Online (Sandbox Code Playgroud)
如果你查看时间,有 4 或 5 个相同的时间,并且默认选项现在应该需要一些时间
有什么想法可能导致它吗?
TypeError: Object of type Decimal is not JSON serializable当我运行时,postman api我收到上述错误,因为sales_qty是十进制,我不知道如何decimal在for循环中解析并将其作为 json 返回
from flask import Flask, jsonify
import decimal,json
result= [('V_M_001', 'KITE', 'Napkin', 1, 2, 12, 0, Decimal('0'), Decimal('0'), Decimal('0'), Decimal('0')),
('V_M_001', 'KITE', 'Napkin', 2, 4, 34, 5, Decimal('1'), Decimal('4'), Decimal('0'), Decimal('0'))]
def fun():
for i in result:
data_all.append({
"machine_name":i.machine_name,
"location":i.location,
"item_name":i.item_name,
"row_no":i.row_no,
"require_minimum_stk_qty":i.require_minimum_stk_qty,
"capacity":i.capacity,
"stock_qty":i.stock_qty,
"sales_qty":i.sales_qty,
"available_qty":i.available_qty,
"sales_day_qty":i.sales_day_qty,
"sales_week_qty":i.sales_week_qty
})
return jsonify(data_all)
fun()
Run Code Online (Sandbox Code Playgroud)
输出:
TypeError: Object of type Decimal is …
因此,我制作了一个个人网络服务器来抓取一些网站并将数据显示在网页上。但是,当我尝试将结果提交到数据库时,我提交的每个视频都会收到警告。我想知道这个警告是否可以修复或至少隐藏?
这是我的代码:
from web_scraper import db
from web_scraper.models import Video
old_db = Video.query.all() # existing database to compare with the new one
db_queue = list() # scraping results ready to be added to the database
### web scraping occurs here to fill db_queue
db.drop_all() # reset db
db.create_all() # recreate a new one
for vid in db_queue:
db.session.add(vid) # adding all pending results
db.session.commit() # error thrown here
Run Code Online (Sandbox Code Playgroud)
这是完整的警告输出:
C:\DevApps\Python38\lib\site-packages\sqlalchemy\orm\session.py:1948: SAWarning: Identity map already had
an identity for (<class 'web_scraper.models.Video'>, …Run Code Online (Sandbox Code Playgroud) 我创建了一个 HTML 表,其中列出了 SQLAlchemy 表中的许多行。该表是使用 jinja2 模板通过循环创建的:
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<td><button type="button" class="btn btn-sm btn-outline-danger">Delete</button>
</tr>
Run Code Online (Sandbox Code Playgroud)
每行都有一个“删除”按钮。我正在尝试弄清楚如何分配删除按钮来删除该特定的 SQLalchemy 行。我尝试将按钮创建为名为的单独烧瓶形式delete_form,并添加一个id="{{single_merchant.id}}属性,button如下所示:
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<form method="post">
{{ delete_form.hidden_tag() }}
<td>{{ delete_form.delete(id=single_merchant.id) }}</td>
</form>
</tr>
Run Code Online (Sandbox Code Playgroud)
然后在 app.py 中我创建了一个 if 语句:
if delete_form.validate_on_submit():
print(f"merchant to delete ID - {delete_form.delete.id}")
Run Code Online (Sandbox Code Playgroud)
我希望获得single_merchant.id输出并在 if 语句中使用它从我的 SQLAlchemy 表中删除特定商家,但相反,我得到了输出,merchant to delete ID - delete即使从 HTML 文件中该id属性的值为 1,因为 …
我在 Flask 中修改了以下示例代码https://tutorial101.blogspot.com/2021/01/python-flask-dynamic-loading-of.html以使用 SQlite 数据库。app.py 的目标是显示汽车品牌的选项,然后按品牌显示可用的车型。app.py 使用两个下拉框,用户可以从中进行选择。原始源代码是用 Flask 编写的,用于访问 MySQL 数据库。我修改了 app.py 的代码以使用 SQlite 数据库。
\napp.py 运行完美。我可以想象两个带有选项的下拉框。当我选择汽车品牌时,应用程序会用可用型号更新第二个下拉框。
\n\n\n\n\n当按下提交按钮时,我想显示两个选择的值 \xe2\x80\x8b\xe2\x80\x8b 。具体来说,哪个是所选的汽车品牌,哪个是所选的型号。
\n我在代码中包含了一条指令来显示汽车品牌的值,并显示与汽车型号对应的值 \xe2\x80\x8b\xe2\x80\x8b 。但是,我找不到获取所选车型的值的方法。
\n\n我怎样才能实现这个目标?
\n谢谢。
\n注意:问题文本已被编辑得更加具体。问题的本质没有改变。
\n我附上源代码和使用的模板。
\n应用程序.py:
\n# flask sqlalchemy\n\nfrom flask_sqlalchemy import SQLAlchemy\n\n# app.py\n\nfrom flask import Flask, render_template, request, jsonify\n\napp = Flask(__name__)\n \napp.config[\'SECRET_KEY\'] = "caircocoders-ednalan"\n\n# sqlite config\napp.config[\'SQLALCHEMY_DATABASE_URI\'] = \'sqlite:///testingdb.db\'\napp.config[\'SQLALCHEMY_TRACK_MODIFICATIONS\'] = False\n\n# Bind the instance to the \'app.py\' Flask application\ndb = SQLAlchemy(app)\n \n\nclass …Run Code Online (Sandbox Code Playgroud) 我有一个包含谜题和类别的多对多关系数据库。当我第一次运行它时,一切都运行得非常好。所有表格均已创建并填充内容。但是,当我第二次运行它以进一步填充数据库时,会弹出以下错误。
AttributeError: Could not locate column in row for column '_sa_instance_state'
我已将问题范围缩小到知道当数据库中已找到相同类别时它会崩溃。但不能将其分配给新谜题的类别,因为这就是崩溃发生的地方。
我制作了以下可重现的示例。运行一次就完美了,再次运行就崩溃了。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
category_identifier = db.Table('category_identifier',
db.Column('categories_id', db.Integer, db.ForeignKey('categories.id')),
db.Column('puzzles_id', db.Integer, db.ForeignKey('puzzles.id'))
)
class Puzzle(db.Model):
__tablename__ = 'puzzles'
id = db.Column(db.Integer, primary_key=True)
categories = db.relationship("Category", secondary=category_identifier)
class Category(db.Model):
__tablename__ = 'categories'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
db.create_all()
db.session.commit()
if __name__ == '__main__':
myList = ['cat1', 'cat2, cat3']
puzzle = …Run Code Online (Sandbox Code Playgroud) 我想首先声明,我知道这个网站上有很多类似的问题,并且解决方案确实有效,我的问题是,至少我能找到的问题都是这样的变体:
\nfrom flask_sqlalchemy import SQLAlchemy\ndb = SQLAlchemy(app)\nclass Example(db.Model):\n id = db.Column(db.Integer, primary_key=True)\n Column1 = db.Column(db.String(100))\n Column2 = db.Column(db.String(100))\n Column3 = db.Column(db.String(100))\n\nimport csv\n\nwith open("source_file.csv") as f:\n reader = csv.reader(f)\n next(reader)\n for i in reader:\n new_entry = Example(\n Column1 = i[0],\n Column2 = i[1],\n Column3 = i[2])\n db.session.add(new_entry)\n db.session.commit()\n\nRun Code Online (Sandbox Code Playgroud)\n这是可行的,但它有几个问题,例如,如果相关表有 n 个列,我需要编写 nx2 行,一次用于定义表,第二次用于填充表的内容。
\n这对于小表来说还算可以,但如果您正在使用具有 100 多个列的表,这会变得非常快。 \n此外,如果由于某种原因表结构发生了一点点变化,就无法维护。
\n因此,我\xe2\x80\x99m 寻求帮助以获得更好的方法,如果这仍然是一个重复的问题,我深表歉意并仅寻求指导,我找到了解决方案,但仅适用于 SQLAlchemy,当我尝试时它们不起作用它们在 FlaskSQlAlchemy 中。
\n我用 Flask 创建了一个 python web 应用程序,似乎我遇到了与数据库的连接问题。我认为这是因为我没有在代码中的某个地方关闭会话。
我有
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)
用于数据库和使用
@views.route('/test/', methods=['GET', 'POST'])
def test():
db.session.add(something)
db.session.commit()
@views.route('/another_page/', methods=['GET', 'POST'])
def page():
some_records = User.query.get(some_ids)
Run Code Online (Sandbox Code Playgroud)
用于将记录添加到数据库中。
在这种情况下,我什么时候必须关闭会话?有没有办法在用户离开后关闭连接?每次数据库完成一个页面时我都应该关闭吗?查询后是否需要关闭连接?
flask-sqlalchemy ×10
python ×10
sqlalchemy ×5
flask ×4
alembic ×1
csv ×1
database ×1
decimal ×1
javascript ×1
jquery ×1
json ×1
mysql ×1
postgresql ×1
pymysql ×1
python-3.x ×1
sqlite ×1