Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Server Side Session with Redis Fails to Serialize LazyString Objects #29362

Open
3 tasks done
weigosw opened this issue Jun 25, 2024 · 4 comments
Open
3 tasks done

Server Side Session with Redis Fails to Serialize LazyString Objects #29362

weigosw opened this issue Jun 25, 2024 · 4 comments

Comments

@weigosw
Copy link

weigosw commented Jun 25, 2024

Bug description

When configuring Superset to use server-side sessions with Redis, an error occurs during the serialization of session data. Specifically, the error message indicates that encoding objects of type LazyString is unsupported. This issue arises when attempting to upload an Excel file, but it may also affect other functionalities that involve session data.

How to reproduce the bug

  1. Configure Superset to use server-side sessions with Redis by setting the following configurations in superset_config.py:
from flask_session import Session
import redis

SESSION_TYPE = 'redis'
SESSION_REDIS = redis.from_url('redis://localhost:6379')
SESSION_SERVER_SIDE = True
  1. Start superset with the follow command:
export FLASK_APP=superset
export SUPERSET_CONFIG_PATH="$HOME/.superset/config/superset_config.py"
superset db upgrade
superset init
superset run -p 8088 -h 0.0.0.0 --with-threads --reload --debugger
  1. Attempt to upload an Excel file via the Superset UI.

Expected Behavior:
The session data should be serialized and stored in Redis without errors, and the Excel file should be uploaded successfully.

Actual Behavior:
The following error is logged:

2024-06-25 20:46:33,851:DEBUG:superset.stats_logger:[stats_logger] (incr) failed_excel_upload
2024-06-25 20:46:33,851:ERROR:superset.app:Failed to serialize session data: Encoding objects of type LazyString is unsupported
2024-06-25 20:46:33,851:ERROR:superset.app:Exception on /exceltodatabaseview/form [POST]
Traceback (most recent call last):
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask/app.py", line 1487, in full_dispatch_request
    return self.finalize_request(rv)
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask/app.py", line 1508, in finalize_request
    response = self.process_response(response)
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask/app.py", line 2005, in process_response
    self.session_interface.save_session(self, ctx.session, response)
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask_session/base.py", line 305, in save_session
    self._upsert_session(app.permanent_session_lifetime, session, store_id)
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask_session/redis/redis.py", line 78, in _upsert_session
    serialized_session_data = self.serializer.encode(session)
  File "/Users/suwei/.pyenv/versions/3.9.19/envs/superset-env/lib/python3.9/site-packages/flask_session/base.py", line 132, in encode
    return self.encoder.encode(dict(session))
TypeError: Encoding objects of type LazyString is unsupported

Screenshots/recordings

截屏2024-06-25 21 25 20

Superset version

4.0.1

Python version

3.9

Node version

Not applicable

Browser

Chrome

Additional context

superset_config.py

import os
import json
import logging

from redis import Redis



DEBUG = True

SHOW_STACKTRACE = True
# 生成的 secret key
SECRET_KEY = 'GoOeN5Uo3wEPliy3PgAgpCi36vw9GEjN9N6ZZR3pEDSH/6E8nkf1ha4d'

# PostgreSQL 数据库 URI
SQLALCHEMY_DATABASE_URI = 'postgresql://superset:superset2024@localhost/superset'

LANGUAGES = {
    'zh': {'flag': 'cn', 'name': 'Chinese'},
    'en': {'flag': 'us', 'name': 'English'},
}

# Setup default language
BABEL_DEFAULT_LOCALE = 'zh'



# 会话配置
SESSION_TYPE = "redis"
SESSION_REDIS = Redis(host="localhost", port=6379, db=0)
SESSION_SERVER_SIDE = True

Checklist

  • I have searched Superset docs and Slack and didn't find a solution to my problem.
  • I have searched the GitHub issue tracker and didn't find a similar bug report.
  • I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.
Copy link

dosubot bot commented Jun 25, 2024

Hey @weigosw! 👋 I'm here to help you with any bugs, questions, and contributing to the project!

To resolve the error "Encoding objects of type LazyString is unsupported" when configuring Superset to use server-side sessions with Redis, you need to ensure that the SESSION_INTERFACE is correctly set up in your superset_config.py file. Here is an example configuration:

from flask_session import RedisSessionInterface
from redis import Redis

SESSION_TYPE = "redis"
SESSION_REDIS = Redis(host="localhost", port=6379, db=0)
SESSION_SERVER_SIDE = True
SESSION_INTERFACE = RedisSessionInterface(SESSION_REDIS)

Make sure you have the flask-session and redis packages installed in your environment. You can install them using pip:

pip install flask-session redis

This configuration sets up Redis as the backend for server-side sessions and should help in handling LazyString objects in session data [1].

To continue talking to Dosu, mention @dosu.

@weigosw
Copy link
Author

weigosw commented Jun 25, 2024

Hi Thanks for help, but i can't import RedisSessionInterface
ImportError: cannot import name 'RedisSessionInterface' from 'flask_session'
@dosu.

Copy link

dosubot bot commented Jun 25, 2024

To resolve the "Encoding objects of type LazyString is unsupported" error without using RedisSessionInterface, you can use the base_json_conv function to handle LazyString objects. This function converts LazyString objects to strings, thus avoiding the unsupported encoding error.

Here is an example of how you can integrate this into your configuration:

  1. Define the base_json_conv function in your superset_config.py:
import json
from redis import Redis
from flask import Flask
from flask_session import Session
from werkzeug.middleware.proxy_fix import ProxyFix
from flask_babel import Babel
from flask_caching import Cache
from flask_appbuilder import AppBuilder, SQLA
from flask_appbuilder.security.manager import AUTH_DB
from flask_appbuilder.security.sqla.manager import SecurityManager
from flask_appbuilder.security.sqla.models import User
from flask_appbuilder.security.views import UserDBModelView
from flask_appbuilder.views import ModelView
from flask_appbuilder import ModelRestApi
from flask_appbuilder.api import BaseApi, expose, rison, protect, safe
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder


<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://dosu.dev), mention @dosu.*

@weigosw
Copy link
Author

weigosw commented Jun 25, 2024

I printed the Session object with encoding errors, the problem should be related to text leading by 'l'

{
    '_permanent': True,
    'locale': 'zh',
    '_fresh': True,
    'csrf_token': 'cdecffb548f609b2b38eeeaf65ace448e9f847da',
    '_user_id': '2',
    '_id': 'd45ed5036f66c80fe6791e116e9c0f31e26c8489ea5acb8b4ea42d274e1be740c93d6f82573d2185896865f164a744bd5394c79c5a791fd08175bb7810baa8e1',
    'page_history': ['http://localhost:8088/exceltodatabaseview/form'],
    '_flashes': [
        (
            'danger', 
            l'无法将Excel文件 "Efficiency-Data-0625.xlsx" 上传到数据库 "Efficiency" 中的表 "Requirements" 内。错误消息:Table \'Requirements\' already exists.'
        )
    ]
}

@dosu.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant