Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Python работа с базой данных

16.11.2018, 10:48. Показов 1955. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
надо на python доработать код, чтобы он отправлял данные в базу данных


Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    SQL = """INSERT INTO cms_blog_posts(
                id, user_id, cat_id, blog_id, pubdate, title, feel, music, content,
                content_html, allow_who, edit_times, edit_date, published, seolink,
                comments, comments_count, rating, metadesc, hits, pagetitle,
                meta_keys, meta_desc
            )
            VALUES (
 
                ЗДЕСЬ ПЕРЕМЕННЫЕ?!
                есть данные для полей:
                    user_id
                    blog_id
                    pubdate
                    title
                    content_html
 
                    
        )"""
    try:
        cursor.execute(SQL)
        #Выполнить команду SQL



надо их как-то вставить в эту таблицу
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2018, 10:48
Ответы с готовыми решениями:

Работа с базой данных в python
Вывожу в докере информацию о картинках. В поле icon, они хранятся вместе с тегами. <a target="_blank"...

Работа с базой данных
Здравствуйте. Скажите, пожалуйста, есть ли какие-то библиотеки (Python) для работы с базой данных Cros 4.01.79? Искал - не нашел, а...

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

20
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 12:01
Цитата Сообщение от IRIP Посмотреть сообщение
ЗДЕСЬ ПЕРЕМЕННЫЕ?!
Нет. Здесь плейсхолдеры. Какие именно зависит от используемого драйвера БД и принятого там стиля подстановки:
paramstyle - Тип используемых пометок при подстановке параметров. Возможны следующие значения этой константы:
“format” Форматирование в стиле языка ANSI C (например, “%s”, “%i” ).
“pyformat” Использование именованных спецификаторов формата в стиле Python ( “%(item)s” )
“qmark” Использование знаков ”?” для пометки мест подстановки параметров.
“numeric” Использование номеров позиций ( ”:1” ).
“named” Использование имен подставляемых параметров ( ”:name” ).
в execute передается два параметра - выражение SQL и кортеж параметров, которые должны соответствовать используемым полям БД. Поля либо указываются\перечисляются в скобках после имени таблицы - в кортеже в этом случае передаются значения только для указанных полей в том же самом порядке, либо опускаются - тогда в кортеже должны быть абсолютно все поля кроме автоинкрементного. Не указывать (в случае перечисления полей) можно поля допускающие NULL.

P.S. Пример динамического формирования SQL выражения (чтобы вручную не писать все плейсхолдеры) вам уже давали в вашей теме.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 12:07  [ТС]
Garry Galler,

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
import vk_api
import config as cnf
import json
import csv
import requests
import re
import MySQLdb
 
params = {
    'owner_id': cnf.owner_id,
    'v': '5.60',
    'filter': 'all',
    'fields': 'cover ',
    'token': cnf.token
}
 
def main():
    # Авторизация
    vk_session = vk_api.VkApi(login=cnf.login, password=cnf.password)
    vk_session.auth()
    vk = vk_session.get_api()
 
    try:
        vk_session.auth(token_only=True)
    except vk_api.AuthError as error_msg:
        print(error_msg)
        return
 
    count = 1
 
    tools = vk_api.VkTools(vk_session)
 
    wall = tools.get_all(
        'wall.get',
        count,
        params
    )
 
    items = wall['items']
    for post in items:
        print(get_data(post))
 
    save_mysql(data)  # сохраняем полученную строку в mysql
 
 
    try:
        save_json(wall)
        print('сохранили в json')
    except:
        print('ошибка сохранения в json')
 
 
def get_data(post):
    '''
    Обрабатываем запрос
    '''
    try:
        post_id = post['id']
    except:
        post_id = 'null'
 
    try:
        post_date = post['date']
    except:
        post_date = 'null'
 
    try:
        post_attachments = get_attachment_data(post)
    except:
        post_attachments = '* * *'
 
    try:
        post_text = post['text']
    except:
        post_text = '* * *'
 
    try:
        post_title = post_text.split('\n\n')[0]
    except:
        post_title = 'Пост №' + post_id
 
    data = {
        'id': post_id,
        'date': post_date,
        'title': post_title,
        'text': post_text,
        'attachments': post_attachments
    }
 
    return data
 
 
def get_attachment_data(post):
 
    if 'attachments' in post:
        list = post['attachments']
 
        photos_list = []
        videos_list = []
        docs_f_list = []
        links_list = []
        pages_list = []
 
        output_attachments_list = [photos_list, videos_list, docs_f_list]
 
        for i in list:
            if i['type'] == 'photo':
                i_photo = i['photo']['photo_604']
                processed_image = ('[img]'+i_photo+'[/img]')
                photos_list.append(processed_image)
 
            elif i['type'] == 'video':
                videos_list.append(get_video_link(i['video']))
 
 
            elif i['type'] == 'doc' and i['doc']['size'] < 10**7:
                docs_f_list.append(i['doc']['url'])
 
            elif i['type'] == 'link':
                links_list.append(i['link']['url'])
 
            elif i['type'] == 'page':
                post.page = i['page']['view_url']
 
    return output_attachments_list
 
 
def get_video_link(video):
    '''
    Return video url from VK video object.
    Args:
    video -- VK video object
    '''
    url = ('{}video.get?owner_id={}&videos={}_{}_{}&count=1&extended=0&v=5.80'
            '&access_token={}').format(
                VK_BASE_URL,
                video['owner_id'],
                video['owner_id'],
                video['id'],
                video['access_key'],
                cnf.token
            )
    video_obj = requests.get(url).json()['response']['items'][0]
    video_url = video_obj['player']
 
    try:
        video_platform = video_obj['platform'].lower()
    except KeyError:
        video_url = 'https://vk.com/video{}_{}'.format(video_obj['owner_id'], video_obj['id'])
        return video_url
 
    if video_platform == 'youtube':
        watch_v = re.search(r'\/([^\/]+)\?', video_url).group(1)
        video_url = 'https://www.youtube.com/watch?v=' + watch_v
 
    elif video_platform == 'vimeo':
        vimeo_video_id = re.search(r'\/([^\/]+)\?', video_url).group(1)
        video_url = 'https://vimeo.com/' + vimeo_video_id
 
    return video_url
 
def get_photo_link(photo_id):
    ACCESS_TOKEN = cnf.token
    params = {
        'v': 5.60,
        'access_token': ACCESS_TOKEN,
        'photos': photo_id
    }
    photo = requests.get(
        'https://api.vk.com/method/video.get',
        params
    )
    return video.json()['response']["items"][0]['player']
 
 
def get_mysql_time_post():
    '''
    Получаем дату последнего поста (для продолжения)
    дату нужно будет конвертировать в Unix time и выдать системе
    только цифры Unix time последнего поста
    '''
    db = MySQLdb.connect(
    #Открыть соединение с базой данных
        cnf.mysql_host,
        cnf.mysql_user,
        cnf.mysql_pass,
        cnf.mysql_base
    )
 
    cursor = db.cursor()
    #Подготовка объекта cursor с помощью метода cursor()
 
    sql = "SELECT * FROM cms_blog_posts \
        WHERE `user_id` = число `blog_id` = число
        взять нужно `pubdate` у самого большого `id`
        КАК?
 
    try:
        cursor.execute(sql)
        #Выполните команду SQL
        results = cursor.fetchall()
        #Получить все строки
 
        for row in sql:
            здесь нужно выбрать у самого большого id
            дату при условии совпадения user_id * blog_id
 
            #Теперь распечатать полученный результат и передаем его в ответе
            print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
                  (fname, lname, age, sex, income )
    except:
        print "Ошибка: не удается получить данные"
 
    # Отключение от сервера
    db.close()
 
    return post_query_time
 
 
def save_photo(photo_id):
    ACCESS_TOKEN = cnf.token
    params = {
        'v': 5.60,
        'access_token': ACCESS_TOKEN,
        'photos': photo_id,
        'photo_sizes': 1
    }
    photo = requests.get(
        'https://api.vk.com/method/photos.getById',
        params
    )
    r = requests.get(
        photo.json()['response'][0]["sizes"][-1]['src'],
    )
 
    with open('img/%s.jpg' % photo.json()['response'][0]["id"], 'wb') as f:
        f.write(r.content)
 
 
def save_doc(doc_id):
    params = {
        'v': API_VERSION,
        'access_token': ACCESS_TOKEN,
        'docs': doc_id
    }
    doc = requests.get(
        'https://api.vk.com/method/docs.getById',
        params
    )
    r = requests.get(
        doc.json()['response'][0]["url"],
    )
    with open('docs/%s.%s' % (doc.json()['response'][0]["title"], doc.json()['response'][0]["ext"]), 'wb') as f:
        f.write(r.content)
 
 
def save_csv(data):
    with open('posts_data.csv', 'a') as cfile:
        writer = csv.writer(cfile, delimiter=",")
        writer.writerow((
            data['id'],
            data['date'],
            data['attachments'],
            data['text']
        ))
 
 
def save_json(data):
    json_file = 'wall.json'
    with open(json_file, 'w') as jfile:
        json.dump(data, jfile, indent=2, ensure_ascii=False)
 
 
def save_mysql():
    '''
    сохраняем пост в mysql
    '''
 
    db = MySQLdb.connect(  #Открыть соединение с базой данных
        cnf.mysql_host,
        cnf.mysql_user,
        cnf.mysql_pass,
        cnf.mysql_base
    )
 
    cursor = db.cursor()
    #Подготовка объекта курсора с помощью метода cursor()
 
    cursor = db.cursor()
    #Подготовка объекта cursor с помощью метода cursor()
 
    sql = """INSERT INTO cms_blog_posts(
                id, user_id, cat_id, blog_id, pubdate, title, feel, music, content,
                content_html, allow_who, edit_times, edit_date, published, seolink,
                comments, comments_count, rating, metadesc, hits, pagetitle,
                meta_keys, meta_desc
            )
            VALUES (
 
                ЗДЕСЬ ПЕРЕМЕННЫЕ?!
                данные получаются для полей:
                    user_id
                    blog_id
                    title
                    content_html
 
                    пока не понятно, как генерировать seolink
        )"""
    try:
        cursor.execute(sql)
        #Выполнить команду SQL
 
        db.commit()
        #Зафиксировать изменения в базе данных
    except:
        db.rollback()
        #Откат в случае ошибки
 
    db.close()
    #Отключение от сервера
 
 
if __name__ == '__main__':
    main()
а
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 12:23
Пример подстановки для select:
Python
1
2
3
4
5
6
SQl = (
    'SELECT * FROM cms_blog_posts '
    'WHERE `user_id` = %s'
)
 
cursor.execute(SQL,(blog_id,))
Откуда вы будете брать blog_id это уже вам виднее. Перенос строковых выражений удобнее делать использую группирующие скобки. Строки будут автоматически конкатенироваться. Либо использовать тройные кавычки для формирования многострочного выражения.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 12:23  [ТС]
чёGarry Galler,

еще нужно сделать запрос,
sql = "SELECT * FROM cms_blog_posts \
WHERE `user_id` = число `blog_id` = число
взять нужно `pubdate` у самого большого `id`
КАК?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 13:02
Цитата Сообщение от IRIP Посмотреть сообщение
взять нужно `pubdate` у самого большого `id`
Понимаю что не совсем понимаю, какой конечный запрос вам нужен.

Пример с использованием функции max и подзапроса на моей БД:
Code
1
2
3
4
5
6
7
MariaDB [erau]> select  parcedate from erau where profile_id=(select max(profile_id) from erau);
+---------------------+
| parcedate           |
+---------------------+
| 2018-10-25 16:24:06 |
+---------------------+
1 row in set (0.049 sec)
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 13:13  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Понимаю что не совсем понимаю, какой конечный запрос вам нужен.
я хочу получить самую свежую дату
сам скрипт запускать - он подключается к базе, получает дату, конвертирует в unix time - потом забирает все посты со стены вконтакте после этой даты


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE `cms_blog_posts` (
  `id` INT(11) NOT NULL,
  `user_id` INT(11) NOT NULL,
  `cat_id` INT(11) NOT NULL,
  `blog_id` INT(11) NOT NULL,
  `pubdate` datetime NOT NULL,
  `title` VARCHAR(250) NOT NULL,
  `feel` VARCHAR(100) NOT NULL,
  `music` VARCHAR(100) NOT NULL,
  `content` mediumtext NOT NULL,
  `content_html` mediumtext NOT NULL,
  `allow_who` VARCHAR(20) NOT NULL,
  `edit_times` INT(11) NOT NULL DEFAULT '0',
  `edit_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `published` tinyint(11) NOT NULL DEFAULT '1',
  `seolink` VARCHAR(255) NOT NULL,
  `comments` tinyint(4) NOT NULL DEFAULT '1',
  `comments_count` INT(11) NOT NULL DEFAULT '0',
  `rating` INT(11) NOT NULL DEFAULT '0',
  `metadesc` VARCHAR(250) NOT NULL,
  `hits` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  `pagetitle` VARCHAR(200) NOT NULL DEFAULT '',
  `meta_keys` VARCHAR(250) NOT NULL DEFAULT '',
  `meta_desc` VARCHAR(250) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- Дамп данных таблицы `cms_blog_posts`
--
 
INSERT INTO `cms_blog_posts` (`id`, `user_id`, `cat_id`, `blog_id`, `pubdate`, `title`, `feel`, `music`, `content`, `content_html`, `allow_who`, `edit_times`, `edit_date`, `published`, `seolink`, `comments`, `comments_count`, `rating`, `metadesc`, `hits`, `pagetitle`, `meta_keys`, `meta_desc`) VALUES
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 13:31
Цитата Сообщение от IRIP Посмотреть сообщение
я хочу получить самую свежую дату
Я вам показал пример с использованием max.
Конструкция же WHERE `user_id` = число `blog_id` = число для меня китайская грамота. Что с чем и зачем сравнивается.
SQL это литературный язык (он создавался для секретарш). Попробуйте выразить свою мысль в этом стиле, а затем заменить ключевые слова на английский вариант, убрать слова-связки и получите хорошее приближение к тому, что вам нужно.
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 16:13  [ТС]
Garry Galler,

мне в таблице нужно получить самую старшую (новую) дату - поле "pubdate" при известных


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import vk_api
import config as cnf
import MySQLdb
 
 
db = MySQLdb.connect(
#Открыть соединение с базой данных
    cnf.mysql_host,
    cnf.mysql_user,
    cnf.mysql_pass,
    cnf.mysql_base
)
 
cursor = db.cursor()
#Подготовка объекта cursor с помощью метода cursor()
user_id = 2735
blog_id = 239
 
cursor.execute(
    "SELECT pubdate FROM cms_blog_posts WHERE user_id = %s AND blog_id = %s",
        (
            user_id, blog_id
        )
    )
 
data = cursor.fetchone()
print(data)
 
# Отключение от сервера
db.close()

запрос я видел

Цитата Сообщение от Garry Galler Посмотреть сообщение
MariaDB [erau]> select parcedate from erau where profile_id=(select max(profile_id) from erau);

но у меня несколько другой случай

Добавлено через 9 минут
по конвертации дата в юникс.тайм https://hg.python.org/cpython/... e.py#l1428 тут много полезной информации

Добавлено через 8 минут
* * *

unix time разобрался как получить

Python
1
2
date_bd = '2011-04-18 16:28:49'
print(int(time.mktime(time.strptime(date_bd, '%Y-%m-%d %H:%M:%S'))))
Добавлено через 29 секунд
* * *

теперь осталось получить самую новую дату из базы данных

Добавлено через 14 минут
* * *

Garry Galler, когда делаю вот так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#Подготовка объекта cursor с помощью метода cursor()
user_id = '2735'
blog_id = '239'
 
cursor.execute(
    "SELECT (max(pubdate)) FROM cms_blog_posts WHERE user_id = %s AND blog_id = %s",
        (
            user_id, blog_id
        )
    )
 
data = cursor.fetchone()
print(data)
ответ приходит None
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 16:29
Функция max прекрасно работает с типом date\datetime и без преобразования в timestamp (хотя при желании можно сделать cast прямо в sql)
Code
1
2
3
4
5
6
7
MariaDB [erau]> select max(datavidachi) from erau;
+------------------+
| max(datavidachi) |
+------------------+
| 2018-11-14       |
+------------------+
1 row in set (0.036 sec
Тот же самый результат получаем явной сортировкой по убыванию:
Code
1
2
3
4
5
6
7
MariaDB [erau]> select datavidachi from erau order by datavidachi  desc limit 1;
+-------------+
| datavidachi |
+-------------+
| 2018-11-14  |
+-------------+
1 row in set (0.037 sec)
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 16:36  [ТС]
Garry Galler, да, только при условии, чтобы в строках в таблице были

user_id = 2735
blog_id = 239
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 16:39
Цитата Сообщение от IRIP Посмотреть сообщение
ответ приходит None
Условия значит возвращают нулевую выборку.
Code
1
2
3
4
5
6
7
MariaDB [erau]>  select max(datavidachi) from erau where profile_id < 100;
+------------------+
| max(datavidachi) |
+------------------+
| NULL             |
+------------------+
1 row in set (0.001 sec)

Code
1
2
3
4
5
6
7
MariaDB [erau]> select max(datavidachi) from erau where profile_id > 100;
+------------------+
| max(datavidachi) |
+------------------+
| 2018-11-14       |
+------------------+
1 row in set (0.044 sec)
Добавлено через 33 секунды
Цитата Сообщение от IRIP Посмотреть сообщение
да, только при условии, чтобы в строках в таблице были
И? Это же очевидно.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 17:00  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
И? Это же очевидно.

так не получается =)

Python
1
2
3
4
5
6
7
8
9
10
11
12
user_id = 2735
blog_id = 239
 
cursor.execute(
    "SELECT max(pubdate) FROM cms_blog_posts WHERE user_id = %s AND blog_id = %s",
        (
            user_id, blog_id
        )
    )
 
data = cursor.fetchone()
print(data)
может я не правильно значения подставляю? Или что-то напутал?

так тоже не работает


Python
1
2
3
4
5
6
7
8
user_id = 2735
blog_id = 239
 
cursor.execute(
    "SELECT max(pubdate) FROM cms_blog_posts WHERE user_id = '2735' AND blog_id = '239')
 
data = cursor.fetchone()
print(data)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 17:07
И есть еще такой нюанс: если вы захотите в этом запросе получить что-то еще кроме макс.\мин. значения одного столбца - например, другие столбцы, то придется использовать подзапрос, так как иначе агрегация вам выдаст левые значения.
Пример с подзапросом:
Code
1
2
3
4
5
6
7
8
MariaDB [erau]> select profile_id,datavidachi,PIB from erau where datavidachi=(select max(datavidachi) from erau);
+------------+-------------+-----------------------------+
| profile_id | datavidachi | PIB                         |
+------------+-------------+-----------------------------+
|      63889 | 2018-11-14  | Курило Олександр Сергійович |
|      63908 | 2018-11-14  | Сергійчук Юрій Вікторович   |
+------------+-------------+-----------------------------+
2 rows in set (0.090 sec)
Добавлено через 3 минуты
Цитата Сообщение от IRIP Посмотреть сообщение
может я не правильно значения подставляю? Или что-то напутал?
Сделайте выборку по вашему условию в консоли и покажите результат (скрин или копипаста):
MySQL
1
SELECT * FROM cms_blog_posts WHERE user_id = 2735 AND blog_id = 239
Оно хоть что-то вообще возвращает?
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 17:13  [ТС]
Garry Galler, Спасибо =)

оказалось, банально - записи были =) дату выдало - я ошибся в user_id =)))

НО! Выдало

(datetime.datetime(2018, 11, 12, 10, 42, 55),)

Добавлено через 1 минуту
* * *

а в phpMyAdmin - выдает

2018-11-12 10:42:55
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 17:21
Цитата Сообщение от IRIP Посмотреть сообщение
НО! Выдало
Выдало кортеж. Даже если вы извлекаете только один результат - fetchone() - и только один столбец, будет все равно кортеж с одним значением. Поэтому извлекайте по индексу data[0].

Добавлено через 1 минуту
Тип данных datetime потому что python драйвер возвращает в скрипт нативный тип данных для python.

Добавлено через 59 секунд
Однако
Python
1
2
3
>>> str(datetime.datetime(2018, 11, 12, 10, 42, 55))
'2018-11-12 10:42:55'
>>>
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 17:32  [ТС]
Garry Galler, не помогает

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import vk_api
import config as cnf
import time
import MySQLdb
 
 
db = MySQLdb.connect(
#Открыть соединение с базой данных
    cnf.mysql_host,
    cnf.mysql_user,
    cnf.mysql_pass,
    cnf.mysql_base
)
 
cursor = db.cursor()
#Подготовка объекта cursor с помощью метода cursor()
user_id = 2735
blog_id = 239
 
cursor.execute(
    "SELECT max(pubdate) FROM cms_blog_posts WHERE user_id = %s AND blog_id = %s",
        (
            user_id, blog_id
        )
    )
 
try:
    data = cursor.fetchall()
    print(str(data))
except:
    print('Ошибка получения запроса')
 
# Отключение от сервера
db.close()
 
 
date_bd = str(data)
print(int(time.mktime(time.strptime(date_bd, '%Y-%m-%d %H:%M:%S'))))


ошибка: builtins.ValueError: time data '((datetime.datetime(2018, 11, 12, 10, 42, 55),),)' does not match format '%Y-%m-%d %H:%M:%S'
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 17:46
Python
1
str(data[0])
Добавлено через 2 минуты
Цитата Сообщение от IRIP Посмотреть сообщение
cursor.fetchall()
Так у вас теперь еще и список кортежей. Каждый кортеж обработайте индивидуально.
Python
1
[str(d[0]) for d in data]
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
16.11.2018, 18:13  [ТС]
Garry Galler, спасибо


заменил fetchall на fetchone

и вывел так:

Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import vk_api
import config as cnf
import time
import MySQLdb
 
 
db = MySQLdb.connect(
#Открыть соединение с базой данных
    cnf.mysql_host,
    cnf.mysql_user,
    cnf.mysql_pass,
    cnf.mysql_base
)
 
cursor = db.cursor()
#Подготовка объекта cursor с помощью метода cursor()
user_id = 2735
blog_id = 239
 
cursor.execute(
    "SELECT max(pubdate) FROM cms_blog_posts WHERE user_id = %s AND blog_id = %s",
        (
            user_id, blog_id
        )
    )
 
try:
    data = cursor.fetchone()
except:
    print('Ошибка получения запроса')
 
# Отключение от сервера
db.close()
 
print(int(time.mktime(time.strptime(str(data[0]), '%Y-%m-%d %H:%M:%S'))))



все получилось
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.11.2018, 18:26
IRIP,
Если вам нужен просто timestamp из datetime, тогда все эти хитрые парсинги строки и преобразования не нужны:
Python
1
2
3
>>> datetime.datetime(2018, 11, 12, 10, 42, 55).timestamp()
1542008575.0
>>>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2018, 18:26
Помогаю со студенческими работами здесь

PyQT5. Работа с базой данных
Здравствуйте. Изучаю базы данных, а заодно и PyQt. При помощи QSqlQueryModel или QSqlTableModel и QTableView отобразил нужные данные в...

VK bot работа с базой данных
И так , хочу у боту подключить базу данных , чтоб он записывал id каждого кто ему пишет , но он просто выпадает в ошибку когда я проверяю...

Используя функции категории Работа с базой данных в excel 2010, реализовать запрос к базе данных
Используя функции категории Работа с базой данных, реализовать запрос к базе данных: средняя закупочная цена для одного вида мороженого.

PHP и работа с базой данных (замена данных)
Добрый вечер. Начал ознакомление с бд. Создал ее + таблицу, написал добавление через форму, теперь пытаюсь написать изменение данных....

Работа с базой данных
Здравствуйте, есть база данных на oracal, нужно получать из неё данные и выводить на сайт. Как это можно сделать? на прямую запросом или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru