কিভাবে এসকিউএলাইটে .sql বা .csv ফাইল লোড আমদানি করবেন?


115

আমার একটি .sql বা ডাম্প করা উচিত .csv SQLite মধ্যে ফাইল (আমি SQLite3 এপিআই ব্যবহার করছি)। আমি কেবল টেবিলগুলি আমদানি / লোড করার জন্য ডকুমেন্টেশন পেয়েছি, পুরো ডাটাবেসগুলি নয়। এখনই, যখন আমি টাইপ করি:

sqlite3prompt> .import FILENAME TABLE 

আমি একটি সিনট্যাক্স ত্রুটি পেয়েছি কারণ এটি একটি টেবিলের প্রত্যাশা করে পুরো ডিবি নয়।


উত্তর:


162

এসকিউএল ফাইল থেকে আমদানি করতে নিম্নলিখিতগুলি ব্যবহার করুন:

sqlite> .read <filename>

একটি সিএসভি ফাইল থেকে আমদানি করতে আপনাকে ফাইলের ধরণ এবং গন্তব্য সারণি নির্দিষ্ট করতে হবে:

sqlite> .mode csv <table>
sqlite> .import <filename> <table>

2
এটি সঠিক উত্তর, তবে কখনও কখনও এটি মজাদার / ভাঙ্গা সিএসভি ফাইলগুলিতে চাপ দেয়।
এলি

আমি .রেড কমন্ড ব্যবহার করার সময় এটি ত্রুটি দিচ্ছে "db.sql খুলতে পারে না"।
ডোরি

2
এটি কলামের নামগুলি কীভাবে পাবে, যদি তারা সিএসভি ফাইলে উপস্থিত না থাকে?
sumanth232

@ ডকুমেন্টেশন অনুসারে, কৃষ্ণ 222, টেবিলটি উপস্থিত না থাকলে, সিএসভির প্রথম লাইনটি কলামের নাম হিসাবে ব্যবহৃত হবে; যদি টেবিলটি বিদ্যমান থাকে তবে সমস্ত সারি ডেটা হিসাবে বিবেচিত হবে।
আলট্যাগ করুন

26

কমান্ড থেকে এটি করার চেষ্টা করুন:

cat dump.sql | sqlite3 database.db

এটি স্পষ্টতই ডাম্প.এসকিউএল-তে এসকিউএল বিবৃতি নিয়ে কাজ করবে। আমি কীভাবে সিএসভি আমদানি করব তা নিশ্চিত নই।


আমি মনে করি এটি ঠিক একই কাজ করবে, তবে ব্যবহারকারীকে নিশ্চিত করতে হবে যে sqlite3 সেটিংস সেট আপ করা হয়েছে.mode csv
ফিলিপট 3

এখানে কেবল একটি মন্তব্য করতে চান, এটি আসলে 100% মারা গেছে, sqlite3 database.db < dump.sqlএসইউইউও কম! cat dump.sql | sqlite3 database.dbপরিবর্তে ব্যবহার করুন! : ডি
জাভিয়ের বুজী

@ জাভিয়ারবাজি: দুঃখিত তবে এটি কোনও অর্থ দেয় না। এই দুটি পদ্ধতি সমান। আপনি যখন একটি পদ্ধতি বা অন্য পদ্ধতি চেষ্টা করেছিলেন তখন আপনার অবশ্যই অন্য কিছু চলছিল। স্থিতিশীল পরীক্ষার শর্তে আমি গ্যারান্টি দিচ্ছি যে গতির কোনও পার্থক্য থাকবে না।
IcarusNM

22

এসকিউএলডিবি-এর সাথে এসসিআরএটিএচ থেকে সিএসভি কোনও টেবিলে আমদানি করতে যান:

  • ওয়েবসাইট থেকে এসকিউএলাইট পান।
  • কমান্ড প্রম্পটে রান sqlite3 <your_db_file_name>* এটি খালি ফাইল হিসাবে তৈরি করা হবে।
  • আপনার নতুন ডাটাবেসে একটি নতুন টেবিল তৈরি করুন। আমদানির জন্য টেবিলটি অবশ্যই আপনার সিএসভি ক্ষেত্রের সাথে মেলে।
  • আপনি এসকিউএল আদেশ দ্বারা এটি করুন: CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);

একবার আপনি টেবিলটি তৈরি হয়ে গেলে এবং কলামগুলি ফাইল থেকে আপনার ডেটার সাথে মেলে তবে আপনি উপরেরটি করতে পারেন ...

.mode csv <table_name>
.import <filename> <table_name>

@ জ্যাকব স্রেফ ফাই, এই উত্তরটি প্রায় 4 বছর বয়সী এবং যে ব্যক্তি এটি পোস্ট করেছে তারা এখানে তিন বছরের বেশি সময় আসেনি।
অ্যান্ড্রু বারবার

আপনি আমার সপ্তাহ সংরক্ষণ করেছেন। আমি আমার কাজটি 3 সেকেন্ডে শেষ করেছি। আমি মাত্র 5 সেকেন্ডের মধ্যে 120MB CSV ফাইলটিকে .db তে রূপান্তরিত করেছি।
জ্যাকিগৌরভ

11

Sqlite3 .import কমান্ডটি সাধারণ সিএসভি ডেটার জন্য কাজ করবে না কারণ এটি কোনও উদ্ধৃত স্ট্রিংয়ে এমনকি কোনও কমাও একটি সীমানা হিসাবে বিবেচনা করে।

এর মধ্যে শেল দ্বারা নির্মিত একটি সিএসভি ফাইল পুনরায় আমদানির চেষ্টা অন্তর্ভুক্ত:

Create table T (F1 integer, F2 varchar);
Insert into T values (1, 'Hey!');
Insert into T values (2, 'Hey, You!');

.mode csv
.output test.csv
select * from T;

Contents of test.csv:
1,Hey!
2,"Hey, You!"

delete from T;

.import test.csv T
Error: test.csv line 2: expected 2 columns of data but found 3

মনে হচ্ছে আমাদের সিএসভি অবশ্যই সন্নিবেশ বিবৃতিগুলির তালিকায় রূপান্তরিত করতে হবে, অথবা সম্ভবত কোনও ভিন্ন ডিলিমিটার কাজ করবে।

সুপার ইউজারে আমি সিএসভি ফাইলগুলি ব্যবহার করার জন্য লগপ্রেসার ব্যবহার করার জন্য একটি পরামর্শ দেখেছি, আমি এটি সন্ধান করব।


প্রতারণাপূর্ণ: আপনি যে ত্রুটিটি পাচ্ছেন তা হায় কমা দ্বারা "আরে, আপনি!" এর কারণে। ২ য় লাইনটি লোড করার সময় স্ক্লাইটটি 3 টি কলাম দেখছে এবং ২ য় কমা অপসারণ করার সময় আপনি এটিকে ত্রুটি ছাড়াই লোড করতে পারেন।
শিব 0

10

আপনি যদি (পাইথন) স্ক্রিপ্টটি ব্যবহার করতে খুশি হন তবে একটি অজগর স্ক্রিপ্ট রয়েছে যা এটি এখানে স্বয়ংক্রিয়ভাবে চলে: https : //github.comrgrp/csv2sqlite

এটি আপনার জন্য টেবিলটি স্বয়ংক্রিয়ভাবে তৈরি করবে পাশাপাশি আপনার জন্য কিছু বেসিক টাইপ-অনুমান এবং ডেটা কাস্টিংও করবে (সুতরাং এটি কোনও কিছু কাজ করবে এবং কলামের ধরণটিকে "আসল" তে সেট করবে)।


প্রায় কাজ করে - শিরোনাম সারি ঠিক আছে আমদানি করে। তবে তারপরে আমি sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings# csv2sqlite.py {csv-file-path} q স্ক্লাইট-ডিবি-পাথ} [{টেবিল-নাম}]
মার্কোস

হুম, আমি এটি ব্যবহার করে ত্রুটিটি কখনও দেখিনি। আপনি কি নন-ইউনিকোড বা নন-ইউটিএফ 8 ডেটা ব্যবহার করছেন? যদি তাই হয় তবে সিএসভি ফাইল এটি ব্যবহার করছে তা নির্দিষ্ট এনকোডিং ব্যবহার করে খোলার জন্য আপনাকে স্ক্রিপ্টটি টুইঙ্ক করতে হবে।
রুফাস পোলক

প্রায় একই সময়ে, আমি একটি রুবি স্ক্রিপ্ট লিখেছিলাম যা একই কাজ করে !! এমনকি ফাইলটির নাম থেকে টেবিলের নামটি অনুমান করে একসাথে একাধিক সিএসভি ফাইলগুলিতে এটি কাজ করা উচিত। github.com/dergachev/csv2sqlite
Dergachev

আমাদের sys.stdin থেকে পড়তে হবে যেহেতু আমাদের একটি 60 জিবি সিএসভি.gz ফাইল রূপান্তর করতে হবে। অথবা, সিএসভি টু এসক্লাইটে জিপিপ রিড সমর্থন পাওয়ার সুযোগ থাকবে? ধন্যবাদ!
মার্কাসএন

@markusN গিথুব ট্র্যাকারে একটি সমস্যা খুলুন। সাধারণত, আমি স্ক্লাইটে একটি 100 গিগাবাইট + সিএসভি ফাইল সম্পর্কে চিন্তিত হই (আপনার কাছে যদিও কোনও "যথাযথ" আরডিবি যেমন পোস্টগ্রিস বা এমনকি বিগকুরি, রেডশিফ্ট ইত্যাদি সম্পর্কে রয়েছে
রুফাস পোলক


1

এসকিউএলাইট অত্যন্ত নমনীয় কারণ এটি এসকিউএলাইট নির্দিষ্ট ডট কমান্ডকেও অনুমতি দেয় এসকিউএল সিন্ট্যাক্সে , (যদিও এগুলি সিএমআই দ্বারা ব্যাখ্যা করা হয়।) এর অর্থ হল আপনি এই জাতীয় জিনিসগুলি করতে পারেন।

এটির smsমতো একটি সারণী তৈরি করুন :

# sqlite3 mycool.db '.schema sms'
CREATE TABLE sms (_id integer primary key autoincrement, Address VARCHAR, Display VARCHAR, Class VARCHAR, ServiceCtr VARCHAR, Message VARCHAR, Timestamp TIMESTAMP NOT NULL DEFAULT current_timestamp);

তারপরে দুটি ফাইল:

# echo "1,ADREZZ,DizzPlay,CLAZZ,SMSC,DaTestMessage,2015-01-24 21:00:00">test.csv

# cat test.sql
.mode csv
.header on
.import test.csv sms

এসকিউএল ফাইল ব্যবহার করে সিএসভি ফাইলের আমদানি পরীক্ষা করতে, চালান:

# sqlite3 -csv -header mycool.db '.read test.sql'

উপসংহারে, এর অর্থ হল যে আপনি .importএসকিউএল এসকিউএল এ বিবৃতিটি ব্যবহার করতে পারবেন , যেমন আপনি অন্য কোনও আরডিবি যেমন মাইএসকিউএল LOAD DATA INFILEইত্যাদিতে করতে পারেন তবে এটি সুপারিশ করা হয় না।


1

শর্তাবলী দেখুন। https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home

এটি পাঠ্যকে কমান্ড লাইনে এসকিউএল রূপান্তর করে। (সিএসভি কেবল পাঠ্য)

উদাহরণ:

cat textfile | termsql -o sqlite.db

ডিফল্টরূপে ডিলিমিটারটি হোয়াইটস্পেস হয়, সুতরাং এটি কমাটা ব্যবহার করছে এমন সিএসভি দিয়ে কাজ করার জন্য আপনি এটি এটি করতে চান:

cat textfile | termsql -d ',' -o sqlite.db

বিকল্পভাবে আপনি এটি করতে পারেন:

termsql -i textfile -d ',' -o sqlite.db

ডিফল্টরূপে এটি কলামের নামগুলি "COL0", "COL1" উত্পন্ন করবে, আপনি যদি এটি করতে কলামগুলির নামের জন্য প্রথম সারিতে ব্যবহার করতে চান তবে:

termsql -i textfile -d ',' -1 -o sqlite.db

আপনি যদি কাস্টম কলামের নাম সেট করতে চান তবে আপনি এটি করুন:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db

1

যদি আপনি এটি উইন্ডোতে ব্যবহার করে থাকেন তবে ডিবিতে "" পাথ যুক্ত করার বিষয়টি নিশ্চিত হন এবং উইন্ডোজ এটি বোঝে তা নিশ্চিত করার জন্য "ডাবল স্ল্যাশ" ব্যবহার করতে হবে।


0

এভাবে আপনি কোনও পরিচয় কলামে প্রবেশ করতে পারেন:

CREATE TABLE my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, name COLLATE NOCASE);
CREATE TABLE temp_table (name COLLATE NOCASE);

.import predefined/myfile.txt temp_table 
insert into my_table (name) select name from temp_table;

myfile.txt সি: \ কোড \ db \ পূর্বনির্ধারিত in একটি ফাইল

data.db সি তে রয়েছে: \ কোড \ db \

myfile.txt এ নতুন লাইনের চরিত্র দ্বারা পৃথক স্ট্রিং রয়েছে।

আপনি যদি আরও কলাম যুক্ত করতে চান তবে পাইপ অক্ষর ব্যবহার করে এগুলি পৃথক করা সহজ, এটি ডিফল্ট।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.