ডকুমেন্টেশনে এ সম্পর্কিত কোনও তথ্য আমি খুঁজে পাইনি, তবে কীভাবে আমি এসকিউএলএলচেমিতে তৈরি টেবিলগুলির একটি তালিকা পেতে পারি?
আমি টেবিলগুলি তৈরি করতে ক্লাস পদ্ধতিটি ব্যবহার করেছি।
উত্তর:
সমস্ত সারণী tables
এসকিউএএলএলএকচেমি মেটাডেটা অবজেক্টের বৈশিষ্ট্যে সংগ্রহ করা হয় । এই টেবিলগুলির নামের একটি তালিকা পেতে:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
আপনি যদি ঘোষণামূলক এক্সটেনশন ব্যবহার করছেন তবে সম্ভবত আপনি নিজেই মেটাটাটা পরিচালনা করছেন না। ভাগ্যক্রমে, মেটাডেটা এখনও বেসক্লাসে উপস্থিত রয়েছে,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
আপনি যদি আপনার ডাটাবেসে কী সারণী উপস্থিত রয়েছে তা সন্ধান করার চেষ্টা করছেন, আপনি এমনকি এসকিউএলএলচেমিকে এখনও জানাননি, তবে আপনি টেবিলের প্রতিচ্ছবি ব্যবহার করতে পারেন। এসকিউএলএলচেমি এরপরে ডাটাবেসটি পরিদর্শন করবে এবং হারিয়ে যাওয়া সমস্ত টেবিলের সাথে মেটাডেটা আপডেট করবে।
>>> metadata.reflect(engine)
পোস্টগ্রিসের জন্য, আপনার যদি একাধিক স্কিমা থাকে তবে আপনাকে ইঞ্জিনের সমস্ত স্কিমার মধ্য দিয়ে লুপ করতে হবে:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)
sqlalchemy.MetaData.reflect()
?
reflect
যুক্তি করতে MetaData.__init__
, একটি বুলিয়ান ফ্ল্যাগে, অবচিত পক্ষে ব্যবহারের MetaData.reflect()
, ঠিক যেমন আমি আমার উত্তর দেখিয়েছে।
MetaData.reflect()
এই পদ্ধতিটি ব্যবহার করতে পারে না । এবং এটি অন্য কারও জন্য মন্তব্য করুন যার ইঞ্জিন ঘোষণার কারণে একই সমস্যা হতে পারে।
engine
টেবিলের নামের তালিকা আনতে বস্তুটিতে একটি পদ্ধতি রয়েছে ।engine.table_names()
Traceback (most recent call last): File "dedup_jobs.py", line 31, in <module> print(engine.table_names()) File "/Users/darshanchoudhary/.virtualenvs/services/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names return self.dialect.get_table_names(conn, schema) value = value.replace(self.escape_quote, self.escape_to_quote) AttributeError: 'NoneType' object has no attribute 'replace'
(স্ট্যাক কেটে)
DB.engine.table_names()
বা ডাটাবেস ভেরিয়েবলের নাম যাই হোক না কেন।
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
engine.table_names()
পাইথন ইন্টারপ্রেটারের মধ্যে db.engine.table_names () ব্যবহার করুন
$ python
>>> from myapp import db
>>> db.engine.table_names()
আমি ভালো কিছু খুঁজছিলাম:
from sqlalchemy import create_engine
eng = create_engine('mysql+pymysql://root:password@localhost:3306', pool_recycle=3600)
q = eng.execute('SHOW TABLES')
available_tables = q.fetchall()
এটি কার্যকর করে এবং সমস্ত সারণী প্রদান করে।
হালনাগাদ:
পোস্টগ্রিস:
eng = create_engine('postgresql+psycopg2://root:password@localhost/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
আমি একই সমস্যা সমাধান করছি এবং এই পোস্টটি খুঁজে পেয়েছি। কিছুক্ষণ চালানোর চেষ্টা করার পরে, আমি সমস্ত সারণী তালিকাবদ্ধ করতে নীচে ব্যবহারের পরামর্শ দেব: (জিরোকগ দ্বারা উল্লিখিত)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
এটি সরাসরি টেবিল পরিচালনা করার জন্য দরকারী এবং আমার মনে হয় এটির প্রস্তাবিত is
টেবিলের নাম পেতে নীচের কোডটি ব্যবহার করুন:
for table_name in engine.table_names():
print(table_name)
"metadata.tables" সারণির নাম এবং সারণী অবজেক্টের জন্য একটি ডিক্ট সরবরাহ করে। যা দ্রুত জিজ্ঞাসার জন্যও কার্যকর হবে।
reflect
, metadata.sorted_tables
কাজ করবে না
সমস্ত টেবিল একবারে প্রতিফলিত করা আপনাকে গোপন টেবিলের নামগুলিও পুনরুদ্ধার করতে দেয়। আমি কিছু অস্থায়ী টেবিল তৈরি করেছি এবং সেগুলি দেখিয়েছি
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
রেফারেন্স http://docs.sqlalchemy.org/en/latest/core/reflection.html
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
বদলে"mysql://user:password@host"
এবংengine.execute("use db_name")
।