2016-01-08 3 views
1

Я хочу использовать результат запроса select now(), который выполняется в python в другом запросе, но я не могу этого сделать.Как использовать select now() result в другом запросе в python

Мой код:

import MySQLdb 

db = MySQLdb.connect(host,username,password,databasename) 

cursor = db.cursor() 

cursor.execute("SELECT NOW()") 

dt = cursor.fetchone() 

dt = str(dt) #1 

cursor2 = db.cursor() 

sql2 = "SELECT pid from PRODUCTS where date between DATE_SUB(" + dt + ", INTERVAL 2 HOUR) and " + dt #... query2 

cursor2.execute(sql2) 

Как я могу использовать дату попал в # 1 в # Query2. Это дает мне ошибку.

Я даже использовал функцию DATE_FORMAT, чтобы преобразовать ее в тот же формат, в котором функция NOW() в sql дает результат. а затем попытался использовать его в sql-запросе. Но все же это дает мне синтаксическую ошибку.

Пожалуйста, кто поможет

+1

* Это дает мне ошибку * - Какую ошибку? – thefourtheye

+1

Что случилось с использованием 'NOW()' непосредственно в вашем запросе? т.е. SELECT pid from PRODUCTS, где дата между DATE_SUB (NOW(), INTERVAL 2 HOUR) и NOW() "' –

+0

@brunodesthuilliers: это работает отлично, но мне нужно использовать это в другом запросе, о котором я не упоминал и хочу чтобы сохранить время одинаковым для обоих запросов. В противном случае время изменится для обоих запросов. –

ответ

1

Вы можете попробовать использовать %s на что соответствующие даты

sql2 = "SELECT pid from PRODUCTS where date between DATE_SUB(%s, INTERVAL 2 HOUR) and %s" 

cursor2.execute(sql2,(dt,dt)) 
+1

спасибо! Оно работало завораживающе :) –

0

Эта ссылка может быть полезно, попробовать его !:

https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html Вот что он имеет:

«Задача состоит в том, чтобы выбрать всех сотрудников, нанятых в 1999 году, и напечатать их имена и нанять да tes к консоли. "

import datetime 
import mysql.connector 

cnx = mysql.connector.connect(user='scott', database='employees') 
cursor = cnx.cursor() 

query = ("SELECT first_name, last_name, hire_date FROM employees " 
     "WHERE hire_date BETWEEN %s AND %s") 

hire_start = datetime.date(1999, 1, 1) 
hire_end = datetime.date(1999, 12, 31) 

cursor.execute(query, (hire_start, hire_end)) 

for (first_name, last_name, hire_date) in cursor: 
    print("{}, {} was hired on {:%d %b %Y}".format(
    last_name, first_name, hire_date)) 

cursor.close() 
cnx.close() 
1

MySQLdb будет автоматически преобразовывать MySQL DateTimes в Python нативных datetime.datetime объектов и Python родной datetime.datetime объекты в MySQL корректных DateTimes, так что вы не имеете никакого преобразования/форматирование или что-то делать самостоятельно. Все это занимает в правильно использовать дб API:.

import MySQLdb 
db = MySQLdb.connect(host,username,password,databasename) 
cursor = db.cursor() 
cursor.execute("SELECT NOW()") 
dt = cursor.fetchone()[0] # fetchone returns a tuple 
print dt # should print a `datetime.datetime` object 

# no need for a second cursor here now you have fetched results 
# from your previous query 
#cursor2 = db.cursor() 

# **ALWAYS** use your db connector's placeholders 
sql2 = "SELECT pid from PRODUCTS where date between DATE_SUB(%s, INTERVAL 2 HOUR) and %s" 

# this way your db connector will take care of proper transformation/formatting/sanitization/escaping etc 
cursor.execute(sql2, (dt, dt)) 
Смежные вопросы