class D_huaxue(db.Model): __tablename__ = 'd_huaxue' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False) longitude = db.Column(db.Float, nullable=False) latitude = db.Column(db.Float, nullable=False)@app.route('/echarts',methods=['GET']) def echarts(): if request.method == 'GET': query_result =D_huaxue.query.filter() context = { 'query_result': query_result } data = [] for row in query_result: data.append({ 'name': row['name'], 'value': [row['longitude'], row['latitude']], 'symbolSize': 15, 'itemStyle': {'color': 'blue'} }) return render_template('地图2.html')File "E:\python-3.7.0\lib\site-packages\flask\app.py", line 2525, in wsgi_app response = self.full_dispatch_request() File "E:\python-3.7.0\lib\site-packages\flask\app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) File "E:\python-3.7.0\lib\site-packages\flask\app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() File "E:\python-3.7.0\lib\site-packages\flask\app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "C:/Users/DELL/Desktop/python_flask-dc/python_flask/app.py", line 1160, in echarts 'name': row['name'], TypeError: 'D_huaxue' object is not subscriptable 127.0.0.1 - - [01/Jun/2023 12:16:40] "GET /echarts HTTP/1.1" 500 -
时间: 2024-02-27 15:51:36 浏览: 21
问题出在 `for` 循环中的 `row` 对象上。在 Flask 中,查询结果返回的是一个对象而不是字典,因此你不能像字典一样对其进行下标操作。你需要使用对象属性来获取相应的值,例如 `row.name` 代替 `row['name']`,`row.longitude` 代替 `row['longitude']`,以此类推。修改代码如下:
```
if request.method == 'GET':
query_result = D_huaxue.query.filter()
data = []
for row in query_result:
data.append({
'name': row.name,
'value': [row.longitude, row.latitude],
'symbolSize': 15,
'itemStyle': {'color': 'blue'}
})
context = {
'query_result': query_result,
'data': data
}
return render_template('地图2.html', **context)
```
同时,你需要将 `data` 变量包含在 `context` 字典中,并在渲染模板时将其传递给模板,以便在模板中可以使用这个变量。
相关问题
File "E:\python-3.7.0\lib\site-packages\sqlalchemy\orm\mapper.py", line 693, in __init__ self._configure_pks() File "E:\python-3.7.0\lib\site-packages\sqlalchemy\orm\mapper.py", line 1386, in _configure_pks % (self, self.persist_selectable.description) sqlalchemy.exc.ArgumentError: Mapper mapped class D_huaxue->d_huaxue could not assemble any primary key columns for mapped table 'd_huaxue'
这个错误通常表示在创建 ORM 映射时没有找到主键列。在 SQLAlchemy 中,每个映射都必须至少有一个主键列,这是为了确保每个行都可以唯一地标识。
你需要检查 `D_huaxue` 类对应的数据库表 `d_huaxue` 是否有主键列。如果没有主键列,你需要添加一个主键列,或者将已有的列设置为主键列。在 SQLAlchemy 中,可以使用 `primary_key=True` 参数将一个列设置为主键列,如下所示:
```python
class D_huaxue(db.Model):
__tablename__ = 'd_huaxue'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
longitude = db.Column(db.Float, nullable=False)
latitude = db.Column(db.Float, nullable=False)
```
在上述代码中,`id` 列是一个整数类型的主键列,`name`、`longitude` 和 `latitude` 列分别是字符串类型和浮点数类型的普通列。这样定义之后,`D_huaxue` 类就可以正确地映射到 `d_huaxue` 表了。
@app.route('/echarts',methods=['GET']) def echarts(): if request.method == 'GET': query_result = D_huaxue.query.filter() data = [] context = { 'query_result': query_result, 'd_huaxuedata': data } return render_template('地图2.html', **context),{ name:'海洋水文数据集', type:'scatter', coordinateSystem: 'bmap', data:d_huaxuedata }还需要在echarts上添加什么
根据你提供的代码,需要在`render_template`中将数据传递给前端页面。具体地,在`context`中添加`d_huaxuedata`字段,将从数据库中查询到的数据传递给前端页面。如下所示:
```python
@app.route('/echarts',methods=['GET'])
def echarts():
if request.method == 'GET':
query_result = D_huaxue.query.filter()
data = []
for row in query_result:
data.append({
'name': row.name,
'value': [row.longitude, row.latitude],
'symbolSize': 15,
'itemStyle': {'color': 'blue'}
})
context = {
'query_result': query_result,
'd_huaxuedata': data
}
return render_template('地图2.html', **context)
```
在前端页面中,需要使用`echarts`库来绘制地图,并将从后端传递过来的数据`d_huaxuedata`传递给地图组件进行绘制。具体地,需要在Javascript代码中添加以下代码:
```javascript
var myChart = echarts.init(document.getElementById('map'));
// 指定地图的配置项和数据
var option = {
bmap: {
center: [113.25, 23.12],
zoom: 12,
roam: true
},
series: [
{
name:'海洋水文数据集',
type:'scatter',
coordinateSystem: 'bmap',
data: {{ d_huaxuedata | safe }}
}
]
};
// 使用制定的配置项和数据显示地图
myChart.setOption(option);
```
在以上代码中,`{{ d_huaxuedata | safe }}`表示从后端传递过来的数据,使用了jinja2模板引擎进行渲染,并使用`| safe`过滤器来确保数据的安全性。同时,`myChart.setOption(option)`语句则是使用制定的配置项和数据显示地图。
这样就可以将从数据库中查询到的数据展示在echarts地图上了。