Разбиение запроса postgres с помощью курсора в колбе Питона - PullRequest
0 голосов
/ 29 декабря 2018

Я просто хочу создать нумерацию страниц в колбе с помощью курсора, но я действительно не знаю, как это сделать, поскольку другие решения, которые я нашел, были очень сложными, и мне сложно их реализовать.может кто-нибудь здесь помочь мне с этим?вот мой простой код

@web_initials.route('/webpage/gmsi/list_of_users', defaults={'page': 1})
@web_initials.route('/webpage/gmsi/list_of_users/<page>')
@login_required
def list_of_users(page):

    conn2 = psycopg2.connect(database='mydb', user='myuser', host='myhost.host', password='mypassword')

    cur2 = conn2.cursor()
    cur2.execute('SELECT count(*) FROM tbl_users')
    x = [dict(((cur2.description[i][0]), value)
                    for i, value in enumerate(row)) for row in cur2.fetchall()]
    data2 = x[0]['count']
    conn = psycopg2.connect(database='mydb', user='myuser', host='myhost.host', password='mypassword')

    cur = conn.cursor()
    cur.execute('SELECT tbl_users.tbluserid, CONCAT(firstname,\' \', middle_initial, \' \', lastname) AS \"FULL NAME\", tbl_single_role.userrole, image_path, tbl_single_role.tblsingleroleid FROM tbl_users INNER JOIN tbl_single_role ON tbl_users.tblsingleroleid = tbl_single_role.tblsingleroleid  ORDER BY lastname ASC LIMIT {limit} offset {offset}'.format(limit = 5, offset = 0))
    data = cur.fetchall()
    page = request.args.get(get_page_parameter(), type=int, default=1)
    pagination = Pagination(page, total=data2, css_framework='bootstrap4', record_name='users')

    return render_template('tables.html', data = data, pagination=pagination)

вот мой html

{{ pagination.info }}
    {{ pagination.links }}
        <div class="table-responsive">

            <table class="table">
                <thead class=" text-primary">
                    <th>
                        Full Name
                    </th>
                        <th>
                          Photo
                        </th>

                    </thead>
                    <tbody>
                        {% for item in data %}
                    <tr>
                        <td>{{item[1]}}</td>
                                {% if item[3] == None %}
                                <td> <img class="img-fluid img-thumbnail" src="{{url_for('static', filename='assets/img/img.jpg')}}" id="imgfilechosen" height="60" width="60"/></td>
                            {% else %}
                        <td> <img class="img-fluid img-thumbnail" src="/{{item[3]}}" id="imgfilechosen" height="60" width="60"/></td>
                    {% endif %}
                </tr>
            {% endfor %}
        </tbody>
     </table>
{{ pagination.links }}

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Вот как я решил свою проблему, извините за задержку:

класс:

@web_initials.route('/webpage/gmsi/list_of_users', defaults={'page': 1})
@web_initials.route('/webpage/gmsi/list_of_users/<page>')
@login_required
def list_of_users(page):

    conn = psycopg2.connect(database='yourdatabase', user='youruser', host='yourhost', password='yourpassword')

    page = request.args.get(get_page_parameter(), type=int, default=int(page))
    if(page == 1):
        cur = conn.cursor()
        cur.execute('SELECT tbl_users.tbluserid, CONCAT(firstname,\' \', middle_initial, \' \', lastname) AS \"FULL NAME\", tbl_single_role.userrole, image_path, tbl_single_role.tblsingleroleid FROM tbl_users INNER JOIN tbl_single_role ON tbl_users.tblsingleroleid = tbl_single_role.tblsingleroleid  WHERE tbl_users.tblsingleroleid < 4 ORDER BY tbluserid ASC LIMIT {limit} offset {offset}'.format(limit = 10, offset = 0))
        data = cur.fetchall()
    else:
        cur = conn.cursor()
        cur.execute('SELECT tbl_users.tbluserid, CONCAT(firstname,\' \', middle_initial, \' \', lastname) AS \"FULL NAME\", tbl_single_role.userrole, image_path, tbl_single_role.tblsingleroleid FROM tbl_users INNER JOIN tbl_single_role ON tbl_users.tblsingleroleid = tbl_single_role.tblsingleroleid  WHERE tbl_users.tblsingleroleid < 4 ORDER BY tbluserid ASC LIMIT {limit} offset {offset}'.format(limit = 10, offset = (5 * int(page))))
        data = cur.fetchall()


    pagination = Pagination(page=page, total=data2, css_framework='bootstrap4', record_name='users')

    return render_template('tables.html', data = data, pagination=pagination)

html side:

  <div class="content">
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <div class="card">
            <div class="card-header card-header-success text-white bg-dark">
              <h4 class="card-title ">List of Users</h4>
              <p class="card-category"></p>
            </div>
            <div class="card-body">
            {{ pagination.info }}
              {{ pagination.links }}
              <div class="table-responsive">

                <table class="table">
                  <thead class="bg-primary">
                    <th>
                      Full Name
                    </th>
                    <th>
                    <center>
                      Photo
                      </center>
                    </th>
                    <th>
                    <center>
                      Last Location
                      </center>
                    </th>
                     <th>
                     <center>

                      </center>
                    </th>
                  </thead>
                  <tbody>
                       {% for item in data %}
                        <tr>
                            <td>{{item[1]}}</td>
                            {% if item[3] == None %}
                            <td><center> <img class="img-fluid img-thumbnail" src="{{url_for('static', filename='assets/img/img.jpg')}}" id="imgfilechosen" height="60" width="60"/></center></td>
                              {% else %}
                              <td> <center><img class="img-fluid img-thumbnail" src="/{{item[3]}}" id="imgfilechosen" height="60" width="60"/></center></td>
                            {% endif %}
                            <td><center><a href="{{ url_for('web_initials.merchandiser_location',  id = item[0]) }}" target="_blank">View</a></center></td>

                            <td><center><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">EDIT</button></center></td>
                          </tr>
                        {% endfor %}
                  </tbody>
                </table>
                {{ pagination.links }}
              </div>
            </div>
          </div>
        </div>
0 голосов
/ 29 декабря 2018

Я только что решил это, я понял, как сделать это только с этими строками, не нужно реализовывать эти длинные методы в github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...