पाता है मैं वर्तमान में sqlalchemy से शुरू कर रहा हूं। मेरे वर्तमान प्रोजेक्ट में मुझे फ्लास्क और कमांड लाइन से कुछ अन्य भाग के साथ कुछ हिस्सा करना है। फ्लास्क के बारे में हिस्सा ठीक चल रहा है, sqlalchemy और सभी के साथ इंटरफेसिंग, लेकिन कमांडलाइन हिस्सा नहीं है।SQLAlchemy किसी ऑब्जेक्ट की अपेक्षा करता है, लेकिन एक तालिका
त्रुटि मैं हो रही है
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)'.",)
मैं गूगल और पढ़ने कथात्मक SQLAlchemy के साथ अपने भाग्य की कोशिश की है, लेकिन मैं क्या समस्या हो सकती है लगता है नहीं कर सकते। मॉड्यूल में कोड है:
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 मॉड्यूल मैं कहाँ SQLAlchemy के लिए आम कोड है। इसमें से अधिकांश फ्लास्क दस्तावेज़ीकरण से आता है, और db_session केवल फ्लास्क के लिए उपयोग किया जाता है, मैंने दूसरे मॉड्यूल के लिए एक अलग सत्र बनाया है।
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()
अंत में, यहाँ "Documento" मॉड्यूल है, हालांकि मुझे शक समस्या यहाँ है। SQLAlchemy आयात कॉलम, पूर्णांक, डाटाबेस आयात बेस से स्ट्रिंग से
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
टिप्पणियों में से कुछ/नाम में स्पेनिश रहे हैं, लेकिन मुझे लगता है कि आप सुरक्षित रूप से उन्हें अनदेखा कर सकते हैं, अगर यह आवश्यक है मैं अनुवाद करेंगे
Lafada के कोड मैं बस के साथ एक और फ़ाइल बना ली है के बाद:
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()
और यह सिर्फ ठीक चलाता है। एकमात्र अंतर जो मैं खोज सकता हूं वह यह है कि सत्र कैसे बनाया जाता है, मैंने इसे अपने मूल कोड में भी संशोधित किया है, लेकिन यह वही त्रुटि प्राप्त करता रहता है।
मुझे अपराधी मिला, यह उस कोड पर नहीं था जो मैं दिखा रहा हूं, लेकिन एक अलग वर्ग में जो इसके साथ संबंध बनाने की कोशिश कर रहा था लेकिन वस्तु के बजाय तालिका से जुड़ रहा था। जब तक मैं कई अन्य बातों की कोशिश की मैं इसे वास्तविक समस्या
यह अजीब बात है, मैंने अपना कोड चलाया है (इसे पोस्टग्रेस में बदल रहा है) और यह ठीक चलता है, मैंने इसे केवल निम्नलिखित में पुन: व्यवस्थित किया है और यह अभी भी चलता है (जबकि दूसरे के आयात मेरे कोड के कुछ हिस्सों) सत्र = सत्र निर्माता (बाइंड = इंजन) सत्र = सत्र() दस्तावेज़ = दस्तावेज़ (os.path.basename ('/ tmp/test.py')) session.add (doc) # यहां session.commit() – Willyfrog
विफल हो गया है, मैंने नया कोड जोड़ने के लिए मूल प्रश्न को संशोधित किया है, क्योंकि इसे ठीक से नहीं देखा जा सकता है – Willyfrog
मैं अंततः सभी कोड को फिर से लिखता हूं और यह काम करता है, यह लगभग विभिन्न फ़ाइलों में समान है। इसलिए मैं आपको प्रतिक्रिया देता हूं क्योंकि मैंने इसे किसी अन्य फ़ाइल में लिखने की कोशिश नहीं की होगी (और समाधान नहीं होना चाहिए) – Willyfrog