2017-02-21 22 views
-2

У меня есть две таблицы:Как выбрать конкретную строку по внешнему ключу?

class symbol(models.Model): 
    ticker = models.CharField(max_length=40) 
    instrument = models.CharField(max_length=64, default='stock') 
    name = models.CharField(max_length=200) 
    sector = models.CharField(max_length=200, default=None) 
    currency = models.CharField(max_length=64, default='USD') 
    created_date = models.DateTimeField(auto_now=True) 
    last_updated_date = models.DateTimeField(auto_now=True) 

class daily_price(models.Model): 
    symbol = models.ForeignKey(symbol) 
    price_date = models.DateTimeField() 
    created_date = models.DateTimeField() 
    last_updated_date = models.DateTimeField() 
    open_price = models.DecimalField(max_digits=19, decimal_places=4) 
    high_price = models.DecimalField(max_digits=19, decimal_places=4) 
    low_price = models.DecimalField(max_digits=19, decimal_places=4) 
    close_price = models.DecimalField(max_digits=19, decimal_places=4) 
    adj_close_price = models.DecimalField(max_digits=19, decimal_places=4) 
    volume = models.BigIntegerField() 

Я хочу, чтобы выбрать строки таблицы strategyceleryapp_daily_price в.

Я хочу использовать read_sql_query для выбора конкретной строки по symbol's ticker (внешний ключ)

con = sqlite3.connect("/home/leo/github/StrategyCeleryWebsite/db.sqlite3") 
df = pd.read_sql_query("SELECT * from strategyceleryapp_daily_price", con) 

# verify that result of SQL query is stored in the dataframe 
print(df.head()) 

con.close() 

В Джанго, я могу использовать daily_price.objects.get(symbol__ticker='AAPL').

Но я не знаю, как написать команду из команды sql.

Как написать эту команду?

спасибо.

+1

почему ты использовать 'sqlite3.connect'? знаете ли вы, что Django басировал на ** _ ORM (объектно-реляционное сопоставление) _ **? –

+0

Да, я знаю ОРМ. Но этот код работает на чистом питоне. Благодарю. – yensheng

+0

как об этом: https://docs.python.org/2/library/sqlite3.html –

ответ

0

в SQL, вы присоединитесь таблицы и проверить значение:

SELECT dp.* from strategyceleryapp_daily_price dp INNER JOIN strategyceleryapp_symbol s on dp.symbod_id=s.id where s.ticker='AAPL' 

Вы можете проверить запрос, Джанго создать с помощью:

python manage.py dbshell 

, а затем:

print(daily_price.objects.get(symbol__ticker='AAPL').query) 
+0

вы получите трассировку 'AttributeError: объект 'daily_price' не имеет атрибута 'query'',' .query', доступного только для queryset, а не для '.get()'. пример 'daily_price.objects.filter (symbol__ticker = 'AAPL'). query .__ str __()' –