Şu anda sqlalchemy ile başlıyorum. Benim şu anki projemde Flask ve komut satırından başka bir bölümle biraz uğraşmam gerekiyor. Şişeye ilişkin bölüm, iyi çalışıyor, sqlalchemy ile bütünleşiyor, ama komuta parçası değil.SQLAlchemy bir nesneyi bekliyor, ancak bir tablo buluyor
alıyorum hata ben google ve okuma bildirime sqlalchemy şansımı denedim
ArgumentError("Class object expected, got 'Table('documentos',
MetaData(bind=Engine(postgresql://user:[email protected]/clasificador)),
Column('id', Integer(), table=<documentos>, primary_key=True, nullable=False),
Column('nombre', String(length=248), table=<documentos>), schema=None)'.",)
, ama sorun ne olabilir bulamıyorum. modülünde kod şudur:
from sqlalchemy.orm import sessionmaker
from db import engine,Base
#some other code
session = sessionmaker(bind=engine)
doc = modelos.documento.Documento(os.path.basename(nelto))
session.add(doc) #here fails
session.remove()
db ben sqlalchemy için ortak kod var modülüdür. Bunun çoğu flask dokümantasyonundan gelir ve db_session sadece flask için kullanılır, diğer modül için farklı bir seans yaptım.
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
sqldebug=True
engine = create_engine(
'postgresql://user:[email protected]/clasificador',
convert_unicode=True,
echo=sqldebug)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base(bind=engine)
Base.query = db_session.query_property()
Son olarak, burada "documento" modülü var, ancak burada sorun olduğundan şüphe duyuyorum. sqlalchemy ithalat Sütun, Integer, db ithal Üssü'nden dize den
class Documento(Base):
'''Clase definiendo los documentos'''
__tablename__ = "documentos"
id = Column(Integer,primary_key=True)
nombre = Column(String(248))
def __init__(self,nombre):
self.nombre = nombre
def __repr__(self):
return '<Documento %r>' % self.nombre
yorumların bazıları/isimleri İspanyolca, ama zaten gerekli eğer ben çeviriler yapacağım, güvenle onları görmezden düşünüyorum
from sqlalchemy.orm import sessionmaker
from modelos.documento import Documento
from db import Base, engine
import os
Session = sessionmaker(bind=engine)
session = Session()
doc = Documento(os.path.basename('/tmp/test.py')) #here fails
session.add(doc)
session.commit()
ve sadece iyi çalışır: sadece sahip başka bir dosya oluşturduk Lafada koduna ardından
. Belirleyebileceğim tek fark, oturumun nasıl oluşturulduğu, orijinal kodumda da değiştirdim, ama aynı hatayı almayı sürdürüyor.
Suçlu buldum, gösterdiğim kodda değildi, ancak bununla bir ilişki oluşturmaya çalışan ancak nesne yerine tabloya bağlanan farklı bir sınıfta. Ben diğer birçok şeyi denedim kadar gerçek sorunu
Bu garip, kodunu çalıştırıyorum (postgres'e değiştiriyorum) ve iyi çalışıyor, sadece aşağıdakilere yeniden düzenledim ve hala çalışıyor benim kod parçaları) oturum = sessionmaker (bağlama = motor) = oturum() doc = Documento (os.path.basename ('/ tmp/test.py' oturum)) session.add (doc) # burada başarısız session.commit() – Willyfrog
Burada düzgün görülemediği için yeni kodu eklemek için orijinal soruyu değiştirdim – Willyfrog
Sonunda tüm kodu yeniden yazdım ve çalıştı, Neredeyse farklı dosyaları aynı. Bu yüzden size başka bir dosyaya yazmayı denemediğimden (ve bir çözüm olmamalı) vereceğim cevabı verdim – Willyfrog