Разделил решение на 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()
Все работает, но хочу через алхимию