2012-01-19 131 views
13

我在創建數據庫和表時遇到了麻煩。數據庫需要在Python腳本中創建。使用Python腳本創建MySQLdb數據庫

#connect method has 4 parameters: 
#localhost (where mysql db is located), 
#database user name, 
#account password, 
#database name  
db1 = MS.connect(host="localhost",user="root",passwd="****",db="test") 

回報

_mysql_exceptions.OperationalError: (1049, "Unknown database 'test'") 

所以很明顯,在DB1需要先創建的,但如何?我在connect()語句之前嘗試了CREATE,但得到錯誤。

一旦數據庫被創建,我該如何創建表? 謝謝, 湯姆

這是語法,這個作品,至少第一次。第二次自然返回的數據庫已經存在。現在想出如何正確使用drop命令。

db = MS.connect(host="localhost",user="root",passwd="****") 
    db1 = db.cursor() 
    db1.execute('CREATE DATABASE test1') 

因此,這是第一次通過。第二次通過提供警告「db已經存在」。如何處理這個?以下是我認爲它應該如何工作,但不是。或者它應該是一個if語句,查找它是否已經存在,不要填充?

import warnings 
warnings.filterwarnings("ignore", "test1") 
+1

不粗魯,但你有沒有試着用搜索引擎呢?從連接中刪除db =「test」並閱讀http://dev.mysql.com/doc/refman/5.0/en/sql-syntax.html或http://www.w3schools.com/sql/default .asp –

+0

是的,大量的谷歌搜索(和RTFM不粗魯,但我不會問是否可以找到它)。當我放棄「測試」時沒錯。問題是你如何使用python而不是SQL來創建數據庫。 – Tom

+0

這是語法,至少在第一次的時候這是有效的。第二次自然返回的數據庫已經存在。現在想出如何正確使用drop命令。 db = MS.connect(host =「localhost」,user =「root」,passwd =「****」) db1 = db.cursor() db1.execute('CREATE DATABASE test1') – Tom

回答

12

使用CREATE DATABASE創建數據庫:

db1 = MS.connect(host="localhost",user="root",passwd="****") 
cursor = db1.cursor() 
sql = 'CREATE DATABASE mydata' 
cursor.execute(sql) 

使用CREATE TABLE創建表:

sql = '''CREATE TABLE foo (
     bar VARCHAR(50) DEFAULT NULL 
     ) ENGINE=MyISAM DEFAULT CHARSET=latin1 
     ''' 
cursor.execute(sql) 

有創建表時有很多選擇。如果你不能確定正確的SQL應該是什麼,它可以幫助使用圖形化的工具,如phpmyadmin創建一個表,然後用SHOW CREATE TABLE發現需要什麼SQL來創建它:

mysql> show create table foo \G 
*************************** 1. row *************************** 
     Table: foo 
Create Table: CREATE TABLE `foo` (
    `bar` varchar(50) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
1 row in set (0.00 sec) 

的phpmyadmin可以還會顯示用於執行各種操作的SQL。這可以是學習一些基本SQL的一種便捷方式。

一旦你嘗試了這一點,那麼你可以用Python編寫SQL。

+0

我喜歡phpmyadmin以瞭解正在發生的事情。謝謝! – Tom

7

我認爲解決的辦法是輕鬆了很多,用「如果沒有」:

sql = "CREATE DATABASE IF NOT EXISTS test1" 
db1.execute(sql) 
6
import MySQLdb 


# Open database connection (If database is not created don't give dbname) 
db = MySQLdb.connect("localhost","yourusername","yourpassword","yourdbname") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 

# For creating create db 
# Below line is hide your warning 
cursor.execute("SET sql_notes = 0; ") 
# create db here.... 
cursor.execute("create database IF NOT EXISTS yourdbname") 



# create table 
cursor.execute("SET sql_notes = 0; ") 
cursor.execute("create table IF NOT EXISTS test (email varchar(70),pwd varchar(20));") 
cursor.execute("SET sql_notes = 1; ") 

#insert data 
cursor.execute("insert into test (email,pwd) values('[email protected]','test')") 

# Commit your changes in the database 
db.commit() 

# disconnect from server 
db.close() 

#OUTPUT 

mysql> select * from test; 
+-----------------+--------+ 
| email   | pwd | 
+-----------------+--------+ 
| [email protected] | test | 
+-----------------+--------+