Как сделать select * from table_name в SQLALchemy?

Разделил решение на 2 этапа:
вот test1.py с create и insert :
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy import  Column, Integer, String
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy import insert
from sqlalchemy.orm import Session


app = Flask(__name__)

mysql_database = 'mysql://cubinez85:123@localhost/testdb'

engine = create_engine(mysql_database)

class Base(DeclarativeBase): pass

class Person(Base):
    __tablename__ = "people"
    id = Column(Integer, primary_key=True, index=True)
    ФИО = Column(String(40), unique=True, index=True)
    Должность = Column(String(20))
    Дата_приема_на_работу = Column(String(15))
    Размер_заработной_платы = Column(String(15))
    Начальник = Column(String(40))

Base.metadata.create_all(bind=engine)

Base.metadata.create_all(bind=engine)

with Session(engine) as session:
    session.execute(
        insert(Person),
        [
            {'ФИО': 'Медведев Олег Эдуардович', 'Должность': 'админ', 'Дата_приема_на_работу': '12.01.2023',
'Размер_заработной_платы': '50.000р', 'Начальник': 'Сидоров Иван Иванович'},
            {'ФИО': 'Пупкин Василий Василиевич', 'Должность': 'водитель', 'Дата_приема_на_работу': '13.10.2023',
'Размер_заработной_платы': '43.000р48к', 'Начальник': 'Петров Сергей Георгиевич'}
        ],
    )
    session.commit()

В результате в mysql все ок :
mysql> use testdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from people;
+----+--------------------------------------------------+--------------------+-----------------------------------------+----------------------------------------------+------------------------------------------------+
| id | ФИО                                              | Должность          | Дата_приема_на_работу                   | Размер_заработной_платы                      | Начальник                                      |
+----+--------------------------------------------------+--------------------+-----------------------------------------+----------------------------------------------+------------------------------------------------+
|  1 | Медведев Олег Эдуардович                         | админ              | 12.01.2023                              | 50.000р                                      | Сидоров Иван Иванович                          |
|  2 | Пупкин Василий Васильевич                        | водитель           | 13.10.2023                              | 43.000р48к                                   | Петров Сергей Георгиевич                       |
+----+--------------------------------------------------+--------------------+-----------------------------------------+----------------------------------------------+------------------------------------------------+
2 rows in set (0,00 sec)

Дальше хочется select сделать:
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine, select

app = Flask(__name__)

engine = create_engine('mysql://cubinez85:123@localhost/testdb')

stmt = select(people).where(people.c.name == "spongebob")
print(stmt)

в error.log:
Traceback (most recent call last):
  File "/var/www/project_flask/test.py", line 9, in <module>
    stmt = select(people).where(people.c.name == "spongebob")
NameError: name 'people' is not defined

Не видит table people
Могу сделать select через mysql.connector :
from flask import Flask, render_template
import mysql.connector

app = Flask(__name__)

db = mysql.connector.connect(
   host="localhost",
   user="cubinez85",
   password="123",
   database="testdb"
)

cursor = db.cursor()

@app.route('/')
def index():

    cursor.execute("select * from people")
    content = cursor.fetchall()
    cursor.execute("select * from people")
    labels = cursor.fetchall()
    labels = list(map(lambda x: x[0], cursor.description))

    return render_template('sqlite.html', labels=labels, content=content)

if __name__ == '__main__':
    app.run()

Все работает, но хочу через алхимию
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
@Everything_is_bad
NameError: name 'people' is not defined
Не видит table people

Ох, ну как так можно трактовать ошибку, а правильно так, python не видит переменную people, а не таблицу people в базе данных.
Ты описал объект как class Person(Base), то почему ты вдруг стал people использовать, ты понимаешь смысл своих действие или это просто копи-паста, без понимания как этот код работает?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы