คำถามติดแท็ก sqlalchemy

SQLAlchemy เป็นชุดเครื่องมือ Python SQL และ Object Relational Mapper ที่ช่วยให้นักพัฒนาแอปพลิเคชันสามารถใช้งาน SQL ได้อย่างเต็มประสิทธิภาพและยืดหยุ่น

3
SQLAlchemy: เอ็นจิ้นการเชื่อมต่อและความแตกต่างของเซสชัน
ฉันใช้ SQLAlchemy และมีอย่างน้อยสามหน่วยงาน: engine, sessionและconnectionซึ่งมีexecuteวิธีการดังนั้นถ้าฉันเช่นต้องการเลือกระเบียนทั้งหมดจากtableที่ฉันสามารถทำเช่นนี้ engine.execute(select([table])).fetchall() และนี่ connection.execute(select([table])).fetchall() และแม้กระทั่งสิ่งนี้ session.execute(select([table])).fetchall() - ผลลัพธ์จะเหมือนกัน ตามที่ฉันเข้าใจถ้ามีคนใช้engine.executeมันสร้างconnectionขึ้นให้เปิดขึ้นsession(การเล่นแร่แปรธาตุจะดูแลให้คุณ) และดำเนินการค้นหา แต่มีความแตกต่างกันทั่วโลกระหว่างสามวิธีในการปฏิบัติงานดังกล่าวหรือไม่?

10
แทรกจำนวนมากด้วย SQLAlchemy ORM
มีวิธีใดบ้างที่จะทำให้ SQLAlchemy ทำการแทรกจำนวนมากแทนที่จะแทรกแต่ละออบเจ็กต์ กล่าวคือ ทำ: INSERT INTO `foo` (`bar`) VALUES (1), (2), (3) ค่อนข้างมากกว่า: INSERT INTO `foo` (`bar`) VALUES (1) INSERT INTO `foo` (`bar`) VALUES (2) INSERT INTO `foo` (`bar`) VALUES (3) ฉันเพิ่งแปลงรหัสบางส่วนเพื่อใช้ sqlalchemy แทนที่จะเป็น raw sql และแม้ว่าตอนนี้จะทำงานได้ดีกว่ามาก แต่ดูเหมือนว่าจะช้าลงในตอนนี้ (มากถึง 10 ตัว) ฉันสงสัยว่านี่เป็นเหตุผลหรือไม่ ฉันสามารถปรับปรุงสถานการณ์โดยใช้เซสชันได้อย่างมีประสิทธิภาพมากขึ้น ในขณะนี้ฉันมีautoCommit=Falseและทำsession.commit()หลังจากที่ฉันได้เพิ่มบางสิ่งแล้ว แม้ว่าสิ่งนี้ดูเหมือนจะทำให้ข้อมูลค้างหาก DB ถูกเปลี่ยนไปที่อื่นเช่นแม้ว่าฉันจะทำการสืบค้นใหม่ฉันยังคงได้ผลลัพธ์เก่ากลับมา? ขอบคุณสำหรับความช่วยเหลือของคุณ!

3
วิธีลบเร็กคอร์ดโดย id ใน Flask-SQLAlchemy
ฉันมีusersตารางในฐานข้อมูล MySql ของฉัน ตารางนี้มีid, nameและageสาขา ฉันจะลบบางบันทึกโดยid? ตอนนี้ฉันใช้รหัสต่อไปนี้: user = User.query.get(id) db.session.delete(user) db.session.commit() แต่ฉันไม่ต้องการสอบถามใด ๆ ก่อนลบการดำเนินการ มีวิธีใดบ้างที่จะทำเช่นนี้? ฉันรู้ฉันสามารถใช้ได้db.engine.execute("delete from users where id=...")แต่ฉันต้องการใช้delete()วิธีการ

6
แบบสอบถาม Flask SQLAlchemy ระบุชื่อคอลัมน์
ฉันจะระบุคอลัมน์ที่ฉันต้องการในแบบสอบถามของฉันโดยใช้แบบจำลองได้อย่างไร (จะเลือกคอลัมน์ทั้งหมดตามค่าเริ่มต้น) ฉันรู้วิธีทำกับเซสชัน sqlalchmey: session.query(self.col1)แต่ฉันจะทำกับโมเดลได้อย่างไร SomeModel.query()ฉันไม่สามารถทำ มีวิธีไหม?

11
ImportError: ไม่มีโมดูลชื่อ MySQLdb
ฉันอ้างถึงบทช่วยสอนต่อไปนี้เพื่อสร้างหน้าเข้าสู่ระบบสำหรับเว็บแอปพลิเคชันของฉัน http://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out--net-29982 ฉันมีปัญหากับฐานข้อมูล ฉันได้รับไฟล์ ImportError: No module named MySQLdb เมื่อฉันดำเนินการ http://127.0.0.1:5000/testdb ฉันได้ลองวิธีที่เป็นไปได้ทั้งหมดในการติดตั้ง python mysql วิธีที่กล่าวถึงในบทช่วยสอน easy_install, sudo apt-get install ฉันได้ติดตั้ง mysql ใน env เสมือนของฉันแล้ว โครงสร้างไดเร็กทอรีของฉันเหมือนกับสิ่งที่อธิบายไว้ในบทช่วยสอน โมดูลได้รับการติดตั้งสำเร็จในระบบของฉันและฉันยังคงได้รับข้อผิดพลาดนี้ กรุณาช่วย. สิ่งที่อาจทำให้เกิดสิ่งนี้


6
อัปเดตฐานข้อมูลอย่างมีประสิทธิภาพโดยใช้ SQLAlchemy ORM
ฉันกำลังเริ่มแอปพลิเคชันใหม่และกำลังมองหาการใช้ ORM โดยเฉพาะอย่างยิ่ง SQLAlchemy สมมติว่าฉันมีคอลัมน์ 'foo' ในฐานข้อมูลของฉันและฉันต้องการเพิ่มคอลัมน์ ใน sqlite ตรงนี่เป็นเรื่องง่าย: db = sqlite3.connect('mydata.sqlitedb') cur = db.cursor() cur.execute('update table stuff set foo = foo + 1') ฉันพบว่า SQLAlchemy SQL-builder เทียบเท่า: engine = sqlalchemy.create_engine('sqlite:///mydata.sqlitedb') md = sqlalchemy.MetaData(engine) table = sqlalchemy.Table('stuff', md, autoload=True) upd = table.update(values={table.c.foo:table.c.foo+1}) engine.execute(upd) ช้ากว่าเล็กน้อย แต่ก็มีไม่มาก นี่คือการคาดเดาที่ดีที่สุดของฉันสำหรับแนวทาง SQLAlchemy ORM: # …
117 python  orm  sqlalchemy 

9
SQLAlchemy: ลบน้ำตก
ฉันต้องพลาดบางอย่างที่ไม่สำคัญกับตัวเลือกการเรียงซ้อนของ SQLAlchemy เพราะฉันไม่สามารถลบน้ำตกแบบง่ายๆเพื่อให้ทำงานได้อย่างถูกต้อง - หากองค์ประกอบหลักถูกลบลูกจะยังคงอยู่พร้อมกับnullคีย์ต่างประเทศ ฉันได้ใส่กรณีทดสอบที่กระชับไว้ที่นี่: from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Parent(Base): __tablename__ = "parent" id = Column(Integer, primary_key = True) class Child(Base): __tablename__ = "child" id = Column(Integer, …

6
sqlalchemy flush () และรับ id แทรก?
ฉันต้องการทำสิ่งนี้: f = Foo(bar='x') session.add(f) session.flush() # do additional queries using f.id before commit() print f.id # should be not None session.commit() แต่f.idคือNoneเมื่อลองแล้ว. ฉันจะทำงานนี้ได้อย่างไร
114 python  sqlalchemy 

1
การกำหนดเวอร์ชัน SQLAlchemy ให้ความสำคัญกับลำดับการนำเข้าคลาส
ฉันทำตามคำแนะนำที่นี่: http://www.sqlalchemy.org/docs/orm/examples.html?highlight=versioning#versioned-objects และพบปัญหา ฉันได้กำหนดความสัมพันธ์ของฉันเช่น: generic_ticker = relation('MyClass', backref=backref("stuffs")) ด้วยสตริงจึงไม่สนใจลำดับการนำเข้าของโมดูลโมเดลของฉัน ทั้งหมดนี้ทำงานได้ดีตามปกติ แต่เมื่อฉันใช้เมตาการกำหนดเวอร์ชันฉันได้รับข้อผิดพลาดต่อไปนี้: sqlalchemy.exc.InvalidRequestError: เมื่อเตรียมใช้งาน mapper Mapper | MyClass | stuffs นิพจน์ 'Trader' ไม่สามารถค้นหาชื่อได้ (ไม่ได้กำหนด "ชื่อ 'MyClass') ถ้านี่คือชื่อคลาสให้พิจารณาเพิ่มความสัมพันธ์นี้ () ให้กับคลาสหลังจากกำหนดคลาสที่ขึ้นต่อกันทั้งสองแล้ว ฉันติดตามข้อผิดพลาดเพื่อ: File "/home/nick/workspace/gm3/gm3/lib/history_meta.py", line 90, in __init__ mapper = class_mapper(cls) File "/home/nick/venv/tg2env/lib/python2.6/site-packages/sqlalchemy/orm/util.py", line 622, in class_mapper mapper = mapper.compile() class VersionedMeta(DeclarativeMeta): def …
111 python  sqlalchemy 


3
sqlalchemy ไม่ได้เลือกเป็นโมฆะ
ฉันจะเพิ่มตัวกรองใน SQL เพื่อเลือกค่าที่ไม่เป็นโมฆะจากคอลัมน์ใดคอลัมน์หนึ่งได้อย่างไร SELECT * FROM table WHERE YourColumn IS NOT NULL; ฉันจะทำเช่นเดียวกันกับตัวกรอง SQLAlchemy ได้อย่างไร select = select(table).select_from(table).where(all_filters)
111 python  sqlalchemy 

6
การแปลง SQLAlchemy ORM เป็น DataFrame แพนด้า
หัวข้อนี้ไม่ได้รับการแก้ไขมาสักระยะหนึ่งแล้วที่นี่หรือที่อื่น ๆ มีวิธีแก้ปัญหาในการแปลง SQLAlchemy <Query object>เป็น DataFrame แพนด้าหรือไม่? Pandas มีความสามารถในการใช้งานpandas.read_sqlแต่ต้องใช้ Raw SQL ฉันมีเหตุผลสองประการที่ต้องการหลีกเลี่ยง: 1) ฉันมีทุกอย่างแล้วโดยใช้ ORM (เหตุผลที่ดีในตัวของมันเอง) และ 2) ฉันใช้รายการไพ ธ อนเป็นส่วนหนึ่งของแบบสอบถาม (เช่นคลาสโมเดลของฉันอยู่.db.session.query(Item).filter(Item.symbol.in_(add_symbols)ที่ไหนItemและadd_symbolsเป็นรายการ). SELECT ... from ... WHERE ... INนี่คือเทียบเท่าของ SQL เป็นไปได้หรือไม่


12
ฉันจะรับแบบสอบถาม SQL ดิบที่คอมไพล์แล้วจากนิพจน์ SQLAlchemy ได้อย่างไร
ฉันมีวัตถุแบบสอบถาม SQLAlchemy และต้องการรับข้อความของคำสั่ง SQL ที่คอมไพล์โดยมีพารามิเตอร์ทั้งหมดที่ถูกผูกไว้ (เช่นไม่มี%sหรือตัวแปรอื่น ๆ ที่รอการเชื่อมโยงโดยคอมไพเลอร์คำสั่งหรือโปรแกรมภาษา MySQLdb เป็นต้น) การเรียกstr()ใช้การสืบค้นพบสิ่งนี้: SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC ฉันพยายามค้นหาใน query._params แต่มันเป็นคำสั่งที่ว่างเปล่า ฉันเขียนคอมไพเลอร์ของตัวเองโดยใช้ตัวอย่างsqlalchemy.ext.compiler.compilesมัณฑนากรนี้แต่แม้แต่คำสั่งก็ยังมี%sที่ฉันต้องการข้อมูล ฉันไม่สามารถเข้าใจได้ว่าเมื่อใดที่พารามิเตอร์ของฉันผสมกันเพื่อสร้างแบบสอบถาม เมื่อตรวจสอบออบเจ็กต์เคียวรีจะเป็นพจนานุกรมว่างเสมอ (แม้ว่าคิวรีจะทำงานได้ดีและเอ็นจิ้นจะพิมพ์ออกมาเมื่อคุณเปิดการบันทึกเสียงสะท้อน) ฉันเริ่มได้รับข้อความว่า SQLAlchemy ไม่ต้องการให้ฉันรู้แบบสอบถามพื้นฐานเนื่องจากมันทำลายลักษณะทั่วไปของอินเทอร์เฟซของนิพจน์ API กับ DB-API ที่แตกต่างกันทั้งหมด ฉันไม่สนใจว่าการสืบค้นจะถูกดำเนินการก่อนที่ฉันจะพบว่ามันคืออะไร ฉันแค่อยากจะรู้!
106 python  sql  mysql  sqlalchemy 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.