SQLAlchemy में, मैं SELECT
कथन से तालिका को पॉप्युलेट या अपडेट कैसे करूं?मैं एसक्यूएलकेमी में टी 1 (चयन * टी 2 से) में कैसे शामिल करूं?
उत्तर
SQLalchemy आपके लिए यह निर्माण नहीं बनाता है। आप पाठ से क्वेरी का उपयोग कर सकते हैं।
session.execute('INSERT INTO t1 (SELECT * FROM t2)')
संपादित करें:
से अधिक एक साल बाद, लेकिन अब SQLAlchemy 0.6+ you can create it पर:
from sqlalchemy.ext import compiler
from sqlalchemy.sql.expression import Executable, ClauseElement
class InsertFromSelect(Executable, ClauseElement):
def __init__(self, table, select):
self.table = table
self.select = select
@compiler.compiles(InsertFromSelect)
def visit_insert_from_select(element, compiler, **kw):
return "INSERT INTO %s (%s)" % (
compiler.process(element.table, asfrom=True),
compiler.process(element.select)
)
insert = InsertFromSelect(t1, select([t1]).where(t1.c.x>5))
print insert
का उत्पादन:
"INSERT INTO mytable (SELECT mytable.x, mytable.y, mytable.z FROM mytable WHERE mytable.x > :x_1)"
एक और संपादन:
अब, 4 साल बाद, सिंटैक्स को एसक्लाक्लेमी 0.9 में शामिल किया गया है, और 0.8.3 पर बैकपोर्ट किया गया है; आप किसी भी select()
बना सकते हैं और उसके बाद Insert
वस्तुओं की नई from_select()
विधि का उपयोग करें:
>>> from sqlalchemy.sql import table, column
>>> t1 = table('t1', column('a'), column('b'))
>>> t2 = table('t2', column('x'), column('y'))
>>> print(t1.insert().from_select(['a', 'b'], t2.select().where(t2.c.y == 5)))
INSERT INTO t1 (a, b) SELECT t2.x, t2.y
FROM t2
WHERE t2.y = :y_1
रूप Noslko टिप्पणी में बताया, तो आप अब कच्चे एसक्यूएल से छुटकारा प्राप्त कर सकते हैं: http://www.sqlalchemy.org/docs/core/compiler.html#compiling-sub-elements-of-a-custom-expression-construct
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.expression import Executable, ClauseElement
class InsertFromSelect(Executable, ClauseElement):
def __init__(self, table, select):
self.table = table
self.select = select
@compiles(InsertFromSelect)
def visit_insert_from_select(element, compiler, **kw):
return "INSERT INTO %s (%s)" % (
compiler.process(element.table, asfrom=True),
compiler.process(element.select)
)
insert = InsertFromSelect(t1, select([t1]).where(t1.c.x>5))
print insert
का उत्पादन:
INSERT INTO mytable (SELECT mytable.x, mytable.y, mytable.z FROM mytable WHERE mytable.x > :x_1)
अब आपको अपना खुद का क्लॉज एलिमेंट बनाना नहीं है। आप नई 'Insert.from_select' विधि का उपयोग कर सकते हैं! मेरा जवाब देखें – nosklo
0,8 के रूप में। 3, अब आप इसे सीधे sqlalchemy में कर सकते हैं: Insert.from_select:
sel = select([table1.c.a, table1.c.b]).where(table1.c.c > 5)
ins = table2.insert().from_select(['a', 'b'], sel)
धन्यवाद। मैं इसे मूल उत्तर में जोड़ दूंगा। – nosklo
- 1. वास्तविक प्रकार `(टी 0, टी 1, टी 2) '
- 2. टी + और टी 2
- 3. मैं VB.NET में एक ऑब्जेर्जेबल कोलेक्शन (टी) में एक सूची (टी) को कैसे परिवर्तित करूं?
- 4. कैनोपी क्लस्टरिंग के लिए टी 1 और टी 2 थ्रेसहोल्ड मान कैसे चुनें?
- 5. मैं टी-एसक्यूएल
- 6. टी - टाइप.गेट टाइप ("टी []")
- 7. मैं टी-एसक्यूएल
- 8. अवलोकन योग्य चयन (टी) बनाम बाध्यकारी सूची (टी)?
- 9. आसान: टी (एन) = टी (एन -1) + एन को इटरेशन विधि
- 10. टी-एसक्यूएल
- 11. टी-एसक्यूएल चयन के हिस्से के रूप में मैं एक सरल स्ट्रिंग मैपिंग कैसे करूं?
- 12. मैं टी-एसक्यूएल में प्रतिशत चिह्न से कैसे बचूं?
- 13. सूची में दृश्य मूलभूत (टी) में एक्शन (टी)। प्रत्येक
- 14. टी-एसक्यूएल
- 15. टी
- 16. jQuery - एक टी का चयन कैसे करें जिसमें वें है?
- 17. टी-एसक्यूएल दो कॉलम
- 18. मैं टी-एसक्यूएल में एक्सएमएल फ़ील्ड के नोड्स के माध्यम से कैसे पुन: प्रयास करूं?
- 19. बाइट [] से टी
- 20. टी
- 21. "टी टी: कक्षा" बाधा से मेल खाने के लिए आप टी को कक्षा में कैसे डाल सकते हैं?
- 22. टी() = टी() क्यों अनुमति है?
- 23. स्काला प्रकार अधिक चौड़ी/foo के निष्कर्ष [टी] (टी, टी): टी
- 24. asInstanceOfOpt [टी] के रूप में कैसे लिखें [टी] जहां टी <: कोई
- 25. emacs में कमांड-टी
- 26. टी-एसक्यूएल
- 27. अजगर में सिंटेक्स (टी)
- 28. टी-एसक्यूएल
- 29. स्थिरांक टी एंड टी बनाम &&
- 30. मैं टी-एसक्यूएल के केस/कब उपयोग करूं?
सुझाव चाहेंगे session.execute ('t1 में डालने (% s)'% str (sqlalchemy_select_expression))? – joeforker
निश्चित रूप से, क्यों नहीं - 'str()' की आवश्यकता नहीं है, क्योंकि '% s' पहले से ही ऐसा करता है। – nosklo
क्या यह अभी भी करने योग्य नहीं है? – Hadrien