Ceci est une continuation de Dernière fois.
Je suis le tutoriel, mais je pense que ça s'est bien passé, sauf pour la première pierre d'achoppement.
Pourtant, notez ce qui m'inquiétait un peu.
Pour MySQL, vous devez toujours spécifier le nombre de caractères dans la colonne. Il ne peut pas être omis comme "sqlalchemy.Column ()".
sqlalchemy_test2.py
import sqlalchemy
import sqlalchemy.ext.declarative
Base = sqlalchemy.ext.declarative.declarative_base()
class Student(Base):
__tablename__ = 'students'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(20))
kana = sqlalchemy.Column(sqlalchemy.String(40))
url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'
engine = sqlalchemy.create_engine(url, echo=True)
Base.metadata.create_all(engine)
[Message d'erreur]
sqlalchemy.exc.CompileError: (in table 'students', column 'name'): Can't generate DDL for NullType(); did you forget to specify a type on this Column?
L'instruction SQL passée à l'argument de la fonction de filtre utilise explicitement la fonction de texte. Si vous n'utilisez pas la fonction de texte, vous recevrez un avertissement.
sqlalchemy_test3.py
import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative
from sqlalchemy import text
Base = sqlalchemy.ext.declarative.declarative_base()
class Student(Base):
__tablename__ = 'students'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = sqlalchemy.Column(sqlalchemy.String(20))
kana = sqlalchemy.Column(sqlalchemy.String(40))
url = 'mysql+pymysql://root:@localhost/test_db?charset=utf8'
engine = sqlalchemy.create_engine(url, echo=False)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
session = Session()
students = session.query(Student).filter("id=20") # SAWarning: Textual SQL expression
students = session.query(Student).filter(text("id=20"))
[Message d'alerte]
SAWarning: Textual SQL expression 'id=20' should be explicitly declared as text('id=20') (this warning may be suppressed after 10 occurrences) {"expr": util.ellipses_string(element)})
Recommended Posts