2016-10-18 4 views
1

Hallo ich habe hart darüber nachgedacht, wie man eine zufällige Reihe von sqlalchemy in einer localhost admin Datenbankansicht auswählt. Ich möchte, dass es eine zufällige Liste auswählt, aber diejenigen mit Benutzer zugewiesen, so wählt es eine zufällige Verlosung wie `Farbe: Ruby up1: dgg2 up2: fh73.below ist, wo der Code für die lokale Host-Datenbank-Sitzung & Ansicht der Datenbank in Modelview localhost.Wie wähle ich eine zufällige Zeile in admin.view localhost sqlalchemy?

admin = Admin(app, name='raffles', template_mode='bootstrap3') 
admin.add_view(ModelView(User, db.session)) 
admin.add_view(ModelView(Raffle, db.session)) 

Ich brauche Hilfe Code Hinzufügen eine Tombola wählen von dort

heren die app.py

from flask import Flask, request, render_template, redirect, url_for 
from flask_admin import Admin 
from flask_admin.contrib.sqla import ModelView 


from forms import RaffleForm 
from models import db, get_db_uri, User, Raffle 
from utils import assign_raffles_to_user, seed_raffles_into_db 

from flask import Flask 
from flask_mail import Mail 
from mail import mail 
from flask_mail import Message 

app = Flask(__name__) 


app.config['MAIL_SERVER']='smtp.gmail.com' 
app.config['MAIL_PORT'] = 465 
app.config['MAIL_USERNAME'] = '[email protected]' 
app.config['MAIL_PASSWORD'] = 'Password' 
app.config['MAIL_USE_TLS'] = False 
app.config['MAIL_USE_SSL'] = True 






app.config['SQLALCHEMY_DATABASE_URI'] = get_db_uri() 
app.config['SECRET_KEY'] = 'some-random-secret-key' 
mail.init_app(app) 

db.app = app 
db.init_app(app) 
db.create_all() 
seed_raffles_into_db() 


admin = Admin(app, name='raffles', template_mode='bootstrap3') 
admin.add_view(ModelView(User, db.session)) 
admin.add_view(ModelView(Raffle, db.session)) 


@app.route('/', methods=['GET', 'POST']) 
def home(): 
    form = RaffleForm(request.form) 
    if request.method == 'POST' and form.validate(): 
     email = form.email.data 
     # check if user exists 
     user = User.query.filter_by(email=email).all() 
     if not user: 
      user = User(email=email) 
      db.session.add(user) 
     else: 
      user = user[0] 
     # assign required raffles to user 
     assign_raffles_to_user(form.raffle_count.data, user) 
     return redirect(url_for('success')) 

    return render_template('home.html', form=form) 


@app.route('/success', methods=['GET']) 
def success(): 
    return render_template('success.html') 


if __name__ == '__main__': 

    app.run(debug=True) 

und heren den utils.py

# utility functions go here 
import random 
import os 
from uuid import uuid4 

import constants 
from models import Raffle, User 
from flask_mail import Message 
from flask_mail import Mail 
from mail import mail 

def generate_raffles(count): 
    for i in xrange(count): 
     colour = constants.COLORS[i % constants.COLORS_LEN] 
     uniq = uuid4().hex 
     uniq_p1, uniq_p2 = uniq[:4], uniq[4:8] 
     yield (colour, uniq_p1, uniq_p2) 


def seed_raffles_into_db(max_raffles=constants.MAX_RAFFLES): 
    if is_inited(): 
     print 'Raffles have already been seeded...' 
     return False 
    from app import db 
    print 'Seeding raffles...' 
    for raffle_colour, raffle_up1, raffle_up2 in generate_raffles(max_raffles): 
     raffle = Raffle(
      colour=raffle_colour, 
      up1=raffle_up1, 
      up2=raffle_up2, 
     ) 
     print "Adding", raffle 
     db.session.add(raffle) 

    db.session.commit() 
    mark_as_inited() 
    return True 


def get_unused_raffles(raffle_count): 
    return (
     Raffle.query.filter_by(
      user=None 
     ).limit(
      constants.RAFFLE_PADDING + raffle_count 
     ) 
    ).all() 


def mark_as_inited(): 
    open(constants.INIT_FILE_PATH, 'w').close() 


def is_inited(): 
    return os.path.exists(constants.INIT_FILE_PATH) 


def assign_raffles_to_user(raffle_count, user): 
    from app import db 
    raffles = get_unused_raffles(raffle_count) 

    for raffle in random.sample(raffles, raffle_count): 
     print "Assigning {0} to {1}".format(raffle, user) 
     msg = Message('Raffle assigned', sender = '[email protected]', recipients = [user.email]) 
     msg.body = myRaffle = "Assigning {0} to {1}".format(raffle, user) 
     mail.send(msg) 
     raffle.user = user 





    db.session.commit() 
    return True 

link to see image of my admin view localhost defined tables -where I want the selection to take place

Antwort

0

eine zufällige Reihe mit MySQL auswählen:

SELECT column FROM table 
ORDER BY RAND() 
LIMIT 5 

eine zufällige Reihe Wählen Sie mit IBM DB2

SELECT column, RAND() as IDX 
FROM table 
ORDER BY IDX FETCH FIRST 1 ROWS ONLY 

Wählen Sie eine beliebige Zeile mit Microsoft SQL Server:

SELECT TOP 5 column FROM table 
ORDER BY NEWID() 

Wählen Sie eine zufällige r ecord mit Oracle:

SELECT column FROM 
(SELECT column FROM table 
ORDER BY dbms_random.value) 
WHERE rownum = 5 

Wählen Sie eine beliebige Zeile mit PostgreSQL:

SELECT column FROM table 
ORDER BY RANDOM() 
LIMIT 5 

mit SQLite eine zufällige Zeile auswählen:

SELECT column FROM table 
ORDER BY 
RANDOM() LIMIT 5; 
+0

für SQL & wo das geht in –

+0

@KimFake Welche Datenbank verwenden Sie? –

+0

Ich benutze sqlite –

Verwandte Themen