如何在admin.view localhost sqlalchemy中选择随机行?

如何在admin.view localhost sqlalchemy中选择随机行?,sql,database,random,flask,flask-sqlalchemy,Sql,Database,Random,Flask,Flask Sqlalchemy,嗨,我正在努力思考如何在本地主机管理数据库视图中从sqlalchemy中选择一个随机行。我想让它选择一个随机列表,但要选择用户指定的列表,所以它会选择一个随机抽奖,比如'color:Ruby up1:dgg2 up2:fh73。下面是本地主机数据库会话的代码&modelview localhost中的数据库视图 admin = Admin(app, name='raffles', template_mode='bootstrap3') admin.add_view(ModelView(User,

嗨,我正在努力思考如何在本地主机管理数据库视图中从sqlalchemy中选择一个随机行。我想让它选择一个随机列表,但要选择用户指定的列表,所以它会选择一个随机抽奖,比如'color:Ruby up1:dgg2 up2:fh73。下面是本地主机数据库会话的代码&modelview localhost中的数据库视图

admin = Admin(app, name='raffles', template_mode='bootstrap3')
admin.add_view(ModelView(User, db.session))
admin.add_view(ModelView(Raffle, db.session))
我需要帮助添加代码,以选择从那里抽奖

这是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'] = 'osman33454@gmail.com'
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)
这是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 = 'osman.soloking009@outlook.com', recipients = [user.email]) 
      msg.body = myRaffle = "Assigning {0} to {1}".format(raffle, user)
      mail.send(msg)
      raffle.user = user





    db.session.commit()
    return True

使用MySQL随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用IBM DB2随机选择一行

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

使用Microsoft SQL Server随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;
使用Oracle选择随机记录:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用PostgreSQL:随机选择一行

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用SQLite随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用MySQL随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用IBM DB2随机选择一行

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

使用Microsoft SQL Server随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;
使用Oracle选择随机记录:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用PostgreSQL:随机选择一行

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

使用SQLite随机选择一行:

SELECT column FROM table
ORDER BY RAND()
LIMIT 5
SELECT TOP 5 column FROM table
ORDER BY NEWID()
SELECT column FROM
( SELECT column FROM table
ORDER BY dbms_random.value )
WHERE rownum = 5
SELECT column FROM table
ORDER BY RANDOM()
LIMIT 5
SELECT column  FROM table 
ORDER BY 
RANDOM() LIMIT 5;

对于sql&这是怎么回事into@KimFake您正在使用哪个数据库?我正在使用sqlite@KimFake请参阅sqlite的已编辑代码&您必须检查代码where is select语句,并修改语法错误select column FROM table ORDER BY RAND()sql的限制1&这是怎么回事into@KimFake您正在使用哪个数据库?我正在使用sqlite@KimFake请参阅sqlite的已编辑代码&您必须检查代码中的select语句,并修改语法错误select column FROM table ORDER BY RAND()LIMIT 1