Я не знаю, как написать sql-запрос на python с помощью sqlalchemy.create_engine

#python #mysql #sql #sqlalchemy #trading

#python #mysql #sql #sql — алхимия #торговля

Вопрос:

 def check_data(self, code):
    if self.is_table_exist():
        sql = "SELECT check_item FROM '%s' WHERE code = '%s'"
        check = self.engine_stock_item_all.execute(sql % (self.today, str(code))).fetchall()[0][0]
        return check

def is_table_exist(self):
    sql = "SELECT 1 FROM information_schema.tables WHERE table_schema ='stock_item_all' AND table_name = '{}'"
    rows = self.engine_stock_item_all.execute(sql.format(self.today)).fetchall()
    if rows:
        return True
    else:
        return False

def make_daily_db(self):
    code_name = self.daily_item['code_name']
    df = pd.DataFrame(self.daily_item)
    df_temp = df[['date', 'open', 'high', 'low', 'close', 'market_cap', 'volume', 'issued_shares', 'outstanding_shares']]
    df_temp.to_sql(name=code_name, con=self.engine_daily_chart, if_exists='append')
    sql = "UPDATE '%s' SET check_item=1 WHERE code_name = '%s'"
    self.engine_stock_item_all.execute(sql % (self.today, code_name))
 

Привет, сейчас я разрабатываю торговую программу на python (3.8). И если я запускаю программу, я получаю ошибку, подобную этой.

Ошибка

sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) (1064, «У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с «20201130», ГДЕ code = «155660» в строке 1″) [SQL:ВЫБЕРИТЕ check_item ИЗ ‘20201130’, ГДЕ code = ‘155660’]

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

Комментарии:

1. Является ли название таблицы буквально всеми числами? Если это так, попробуйте использовать обратные тики вместо одинарных кавычек: SELECT check_item FROM `%s` WHERE code = '%s'

2. О, действительно спасибо за ваш ответ. Я попробую ваш комментарий и… Я получил еще одну ошибку. Процесс завершен с кодом выхода -1073740791 (0xC0000409). Я думаю, что это ошибка PyQt5.EventLoop. Если вы знаете об этой проблеме, пожалуйста, предоставьте свою помощь подробнее. В любом случае, большое спасибо!

3. Хорошо, но на первоначальный вопрос о том, что имя таблицы — это все числа, так и не был дан ответ, поэтому мой пример был только предположением. Похоже, что в таблице могут отсутствовать числа, что вызывает ошибку, но я бы подумал, что дата и код будут указаны в предложении WHERE, а предложение FROM, возможно, будет использовать stock_item_all ? … Я могу ошибаться, но у меня нет полной картины, которую вы знаете.

4. Я решаю проблему. Ваш комментарий был действительно полезен для меня. Спасибо!

5. Что же это было за открытие? (может быть полезно и другим)

Ответ №1:

Удалить одинарные кавычки

 SELECT check_item FROM %s WHERE code = %s