flask appbuilder

Django, Flask, Bottle, WSGI, CGI…
Antworten
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Hallo zusammen,

hat sich jemand von Euch schon Mal mit dem flask appbuilder beschäftigt? Siehe Link: https://flask-appbuilder.readthedocs.io ... intro.html

Ich möchte gerne eine schöne Datenbank in Python natürlich. Soweit funktioniert auch das meiste, wie ich mir das so vorstelle. Brauche aber Hilfe. Ich hätte gerne eine Funktion mit der ich Datensätze duplizieren kann und ausgewählte Daten möchte ich auch ganz gern als CSV. Datei exportieren.

Viele liebe Grüße
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich möchte gerne eine schöne Datenbank in Python natürlich.
Du meinst ein webbasiertes Frontend für deine DB, oder?
ch hätte gerne eine Funktion mit der ich Datensätze duplizieren kann
Das will man normalerweise gerade _nicht_, zumindest bei einer relationalen Datenbank.

Welche Datenbank benutzt du? Und eine Exportfunktion Datensätze -> CSV kann man sich eigentlich auch mit relativ wenig Code selber schreiben.

Gruß, noisefloor
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Hallo noisefloor,

Ja eine Frontend. Ich habe mich für die SQLAlchemy Variante entschieden. Das mit dem Duplizieren so denk ich, macht es dem Endnutzer leichter, bestehende Datensätze zu ändern und diese als neue abzuspeichern.
Die exportierte CSV Datei wird dann später weiterverarbeitet. Ich habe das auch schon ein Script, weiß nur leider nicht, wie ich es im flask appbuilder am besten mit einpflegen kann.

Viele Grüße
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Ich habe mich für die SQLAlchemy Variante entschieden.
Heißt was genau? Also was meinst du mit Variante? SQLAlchemy ist ja "nur" eine Zwischenschicht und ORM, die sich zwischen Python und eine relationale Datenbank legt.

Wenn es "nur" im das Frontend für die DB geht: warum nimmst du nicht was bestehendes wie PHPMyAdmin für MYSQL / Maria DB oder pgAdmin für PostgreSQL oder SQLite Browser für SQLite?
Flask Appbuilder ist ja kein dediziertes Frontend für die DB.

Gruß, noisefloor
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Hallo,

sorry, das ich so undeutlich bin. Es ist eine Sqlite Datenbank.

Code: Alles auswählen

# The SQLAlchemy connection string.
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(basedir, "app.db")
# SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
# SQLALCHEMY_DATABASE_URI = 'postgresql://root:password@localhost/myapp'
Also zurück zum Thema. :D
Wie kann ich da einen zusätzlichen Button hinzufügen, mit dem ich Datensätze duplizieren kann?

Muss ich das in der vorgegebenen base_list.html Vorlage ändern/hinzufügen?

Code: Alles auswählen

{% import 'appbuilder/general/lib.html' as lib %}

{% set can_add = "can_add" | is_item_visible(modelview_name) %}
{% set can_show = "can_show" | is_item_visible(modelview_name) %}
{% set can_edit = "can_edit" | is_item_visible(modelview_name) %}
{% set can_delete = "can_delete" | is_item_visible(modelview_name) %}
{% set actions = actions | get_actions_on_list(modelview_name) %}

<div class="well well-sm">
    {% block list_header scoped %}
        {{ lib.render_list_header(can_add, page, page_size, count, filters, actions, modelview_name) }}
    {% endblock %}
</div>

{% if count > 0 %}

    {% block begin_content scoped %}
    {% endblock %}

    {% block begin_loop_header scoped %}
    {% endblock %}

    {% block begin_loop_values %}
    {% endblock %}

    {% block end_content scoped %}
    {% endblock %}

    {{ lib.action_form(actions, modelview_name) }}

    <script language="javascript">
        $(document).ready(function() {
            window.modelActions = new AdminActions();
        });
    </script>

{% else %}
    <b>{{_("No records found")}}</b>
{% endif %}
Vielen Dank für deine Hilfe
pUC19
User
Beiträge: 13
Registriert: Donnerstag 19. September 2019, 14:33

Nach langem raumprobieren hier endlich die Lösung. :D

Code: Alles auswählen

@action("clone", "Duplizieren", "Duplizieren?", "far fa-copy", single=False)
    def duplicate_object(self,items):
        if isinstance(items, list):
            urltools.get_filter_args(self._filters)
            order_column, order_direction = self.base_order
            count, lst = self.datamodel.query(self._filters, order_column, order_direction)
            
            for item in self.datamodel.get_values(items, self.list_columns):
                db.session.add(Primer(name=item['name'], gene=item['gene'],sequence=item['sequence'],contact=item['contact'],description=item['description'],restriction_site=item['restriction_site'], tm=item['tm'],position_from_ATG=item['position_from_ATG']))
                db.session.commit()
                
                self.update_redirect()
        else:
            pass
            #db.session.add(Primer())
            #db.session.commit()
        return redirect(self.get_redirect())
Antworten